&НаКлиентеНаСервереБезКонтекста
Функция вСтрРазделить(Знач Стр, Разделитель, ВключатьПустые = Истина)

	МассивСтрок = Новый Массив;
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				Значение = СокрЛП(Стр);
				Если ВключатьПустые Или Не ПустаяСтрока(Значение) Тогда
					МассивСтрок.Добавить(Значение);
				КонецЕсли;
				Возврат МассивСтрок;
			КонецЕсли;

			Значение = СокрЛП(Лев(Стр, Поз - 1));
			Если ВключатьПустые Или Не ПустаяСтрока(Значение) Тогда
				МассивСтрок.Добавить(Значение);
			КонецЕсли;
			Стр = СокрЛ(Сред(Стр, Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				Значение = СокрЛП(Стр);
				Если ВключатьПустые Или Не ПустаяСтрока(Значение) Тогда
					МассивСтрок.Добавить(Значение);
				КонецЕсли;
				Возврат МассивСтрок;
			КонецЕсли;

			Значение = СокрЛП(Лев(Стр, Поз - 1));
			Если ВключатьПустые Или Не ПустаяСтрока(Значение) Тогда
				МассивСтрок.Добавить(Значение);
			КонецЕсли;
			Стр = Сред(Стр, Поз + ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция вЗначениеВМассив(Знач Значение)
	Массив = Новый Массив;
	Массив.Добавить(Значение);

	Возврат Массив;
КонецФункции

&НаСервереБезКонтекста
Функция вЕстьПраваАдминистратора()
	Возврат ПравоДоступа("Администрирование", Метаданные);
КонецФункции

&НаКлиенте
Процедура вПоказатьВопрос(ИмяПроцедуры, ТекстВопроса, ДопПараметры = Неопределено)
	ПоказатьВопрос(Новый ОписаниеОповещения(ИмяПроцедуры, ЭтаФорма, ДопПараметры), ТекстВопроса,
		РежимДиалогаВопрос.ДаНетОтмена, 20);
КонецПроцедуры
&НаСервере
Процедура вОтладкаСервер()
	//ТабРезультат = вПолучитьОбработку().моПолучитьТаблицеРегистраторов("ААА");
КонецПроцедуры

&НаСервере
Функция вПолучитьОбработку()
	Возврат РеквизитФормыВЗначение("Объект");
КонецФункции

&НаСервереБезКонтекста
Функция вСкопироватьСтруктуру(Источник)
	Струк = Новый Структура;

	Для Каждого Элем Из Источник Цикл
		Струк.Вставить(Элем.Ключ, Элем.Значение);
	КонецЦикла;

	Возврат Струк;
КонецФункции

&НаСервереБезКонтекста
Функция вПроверитьНаличиеСвойства(Объект, ИмяСвойства)
	Струк = Новый Структура(ИмяСвойства);
	ЗаполнитьЗначенияСвойств(Струк, Объект);

	Возврат (Струк[ИмяСвойства] <> Неопределено);
КонецФункции

&НаСервереБезКонтекста
Функция вСформироватьТаблицуДвиженийДокументов(АдресХранилища, Знач УникальныйИдентификатор)
	Попытка
		ТабРезультат = ПолучитьИзВременногоХранилища(АдресХранилища);
	Исключение
		ТабРезультат = Неопределено;
	КонецПопытки;

	Если ТабРезультат = Неопределено Тогда
		АдресХранилища = "";
	КонецЕсли;

	Если ТабРезультат = -1 Или ТабРезультат = Неопределено Или ТабРезультат.Колонки.Количество() = 0 Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));

		ТабРезультат = Новый ТаблицаЗначений;
		ТабРезультат.Колонки.Добавить("ИмяРегистра", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);
		ТабРезультат.Колонки.Добавить("ТипСтрокой", ТипСтрока);

		Для Каждого ОбъектМД Из Метаданные.Документы Цикл
			Для Каждого Элем Из ОбъектМД.Движения Цикл
				НС = ТабРезультат.Добавить();
				НС.Имя = ОбъектМД.Имя;
				НС.Синоним = ОбъектМД.Представление();
				НС.Комментарий = ОбъектМД.Комментарий;
				НС.ТипСтрокой = ОбъектМД.ПолноеИмя();
				НС.ИмяРегистра = Элем.ПолноеИмя();
			КонецЦикла;
		КонецЦикла;

		ТабРезультат.Сортировать("ИмяРегистра, Имя");
		ТабРезультат.Индексы.Добавить("ИмяРегистра");

		АдресХранилища = ПоместитьВоВременноеХранилище(ТабРезультат, ?(АдресХранилища = "", УникальныйИдентификатор,
			АдресХранилища));
	КонецЕсли;

	Возврат ТабРезультат;
КонецФункции

&НаСервереБезКонтекста
Функция вСформироватьТаблицуПодписокНаСобытия(АдресХранилища, Знач УникальныйИдентификатор)
	Попытка
		ТабРезультат = ПолучитьИзВременногоХранилища(АдресХранилища);
	Исключение
		ТабРезультат = Неопределено;
	КонецПопытки;

	Если ТабРезультат = Неопределено Тогда
		АдресХранилища = "";
	КонецЕсли;

	Если ТабРезультат = -1 Или ТабРезультат = Неопределено Или ТабРезультат.Колонки.Количество() = 0 Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));

		Кэш = Новый Соответствие;

		ТабРезультат = Новый ТаблицаЗначений;
		ТабРезультат.Колонки.Добавить("Источник", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);

		СтрукДанные = Новый Структура("Имя, Синоним, Комментарий");
		Для Каждого Подписка Из Метаданные.ПодпискиНаСобытия Цикл
			СтрукДанные.Имя = Подписка.Имя;
			СтрукДанные.Синоним = Подписка.Представление();
			СтрукДанные.Комментарий = СтрукДанные.Комментарий;

			Для Каждого Тип Из Подписка.Источник.Типы() Цикл
				НС = ТабРезультат.Добавить();
				ЗаполнитьЗначенияСвойств(НС, СтрукДанные);

				ИмяИсточника = Кэш[Тип];
				Если ИмяИсточника = Неопределено Тогда
					ИмяИсточника =  Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
					Кэш[Тип] = ИмяИсточника;
				КонецЕсли;

				НС.Источник = ИмяИсточника;
			КонецЦикла;
		КонецЦикла;

		ТабРезультат.Сортировать("Источник, Имя");
		ТабРезультат.Индексы.Добавить("Источник");

		АдресХранилища = ПоместитьВоВременноеХранилище(ТабРезультат, ?(АдресХранилища = "", УникальныйИдентификатор,
			АдресХранилища));
	КонецЕсли;

	Возврат ТабРезультат;
КонецФункции

&НаСервереБезКонтекста
Функция вСформироватьТаблицуОбщихКоманд(АдресХранилища, Знач УникальныйИдентификатор)
	Попытка
		ТабРезультат = ПолучитьИзВременногоХранилища(АдресХранилища);
	Исключение
		ТабРезультат = Неопределено;
	КонецПопытки;

	Если ТабРезультат = Неопределено Тогда
		АдресХранилища = "";
	КонецЕсли;

	Если ТабРезультат = -1 Или ТабРезультат = Неопределено Или ТабРезультат.Колонки.Количество() = 0 Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));

		Кэш = Новый Соответствие;

		ТабРезультат = Новый ТаблицаЗначений;
		ТабРезультат.Колонки.Добавить("Параметр", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);

		СтрукДанные = Новый Структура("Имя, Синоним, Комментарий");
		Для Каждого ОбъектМД Из Метаданные.ОбщиеКоманды Цикл
			СтрукДанные.Имя = ОбъектМД.Имя;
			СтрукДанные.Синоним = ОбъектМД.Представление();
			СтрукДанные.Комментарий = ОбъектМД.Комментарий;

			Для Каждого Тип Из ОбъектМД.ТипПараметраКоманды.Типы() Цикл
				НС = ТабРезультат.Добавить();
				ЗаполнитьЗначенияСвойств(НС, СтрукДанные);

				ИмяПараметра = Кэш[Тип];
				Если ИмяПараметра = Неопределено Тогда
					ИмяПараметра =  Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
					Кэш[Тип] = ИмяПараметра;
				КонецЕсли;

				НС.Параметр = ИмяПараметра;
			КонецЦикла;
		КонецЦикла;

		ТабРезультат.Сортировать("Параметр, Имя");
		ТабРезультат.Индексы.Добавить("Параметр");

		АдресХранилища = ПоместитьВоВременноеХранилище(ТабРезультат, ?(АдресХранилища = "", УникальныйИдентификатор,
			АдресХранилища));
	КонецЕсли;

	Возврат ТабРезультат;
КонецФункции

&НаСервереБезКонтекста
Функция вСформироватьТаблицуКоманд(АдресХранилища, Знач УникальныйИдентификатор)
	Попытка
		ТабРезультат = ПолучитьИзВременногоХранилища(АдресХранилища);
	Исключение
		ТабРезультат = Неопределено;
	КонецПопытки;

	Если ТабРезультат = Неопределено Тогда
		АдресХранилища = "";
	КонецЕсли;

	Если ТабРезультат = -1 Или ТабРезультат = Неопределено Или ТабРезультат.Колонки.Количество() = 0 Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));

		Кэш = Новый Соответствие;

		ТабРезультат = Новый ТаблицаЗначений;
		ТабРезультат.Колонки.Добавить("Параметр", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);

		СтрукДанные = Новый Структура("Имя, Синоним, Комментарий");

		ПереченьРазделов = "Справочники, ЖурналыДокументов, Документы, Перечисления, Обработки, Отчеты,
						   |ПланыСчетов, ПланыВидовХарактеристик, ПланыВидовРасчета, ПланыОбмена,
						   |РегистрыСведений, РегистрыНакопления, РегистрыРасчета, РегистрыБухгалтерии,
						   |БизнесПроцессы, Задачи, КритерииОтбора";

		СтрукРазделы = Новый Структура(ПереченьРазделов);

		Для Каждого Элем Из СтрукРазделы Цикл
			Для Каждого ОбъектХХХ Из Метаданные[Элем.Ключ] Цикл
				ИмяТипаХХХ = ОбъектХХХ.ПолноеИмя();

				Если вПроверитьНаличиеСвойства(ОбъектХХХ, "Команды") Тогда
					Для Каждого ОбъектМД Из ОбъектХХХ.Команды Цикл
						СтрукДанные.Имя = ОбъектМД.ПолноеИмя();
						СтрукДанные.Синоним = ОбъектМД.Представление();
						СтрукДанные.Комментарий = ОбъектМД.Комментарий;

						Для Каждого Тип Из ОбъектМД.ТипПараметраКоманды.Типы() Цикл
							ИмяПараметра = Кэш[Тип];
							Если ИмяПараметра = Неопределено Тогда
								ИмяПараметра =  Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
								Кэш[Тип] = ИмяПараметра;
							КонецЕсли;

							Если ИмяПараметра = ИмяТипаХХХ Тогда
								Продолжить;
							КонецЕсли;

							НС = ТабРезультат.Добавить();
							ЗаполнитьЗначенияСвойств(НС, СтрукДанные);

							НС.Параметр = ИмяПараметра;
						КонецЦикла;
					КонецЦикла;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;

		ТабРезультат.Сортировать("Параметр, Имя");
		ТабРезультат.Индексы.Добавить("Параметр");

		АдресХранилища = ПоместитьВоВременноеХранилище(ТабРезультат, ?(АдресХранилища = "", УникальныйИдентификатор,
			АдресХранилища));
	КонецЕсли;

	Возврат ТабРезультат;
КонецФункции

&НаСервереБезКонтекста
Функция вСформироватьТаблицуПодсистем(АдресХранилища, Знач УникальныйИдентификатор)
	Попытка
		ТабРезультат = ПолучитьИзВременногоХранилища(АдресХранилища);
	Исключение
		ТабРезультат = Неопределено;
	КонецПопытки;

	Если ТабРезультат = Неопределено Тогда
		АдресХранилища = "";
	КонецЕсли;

	Если ТабРезультат = -1 Или ТабРезультат = Неопределено Или ТабРезультат.Колонки.Количество() = 0 Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));

		Кэш = Новый Соответствие;

		ТабРезультат = Новый ТаблицаЗначений;
		ТабРезультат.Колонки.Добавить("Объект", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("ПолноеИмя", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
		ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);

		Коллекция = Новый Соответствие;
		вСформироватьКоллекциюПодсистем( , Коллекция);

		СтрукДанные = Новый Структура("Имя, ПолноеИмя, Синоним, Комментарий");
		Для Каждого Элем Из Коллекция Цикл
			ОбъектМД = Элем.Ключ;

			СтрукДанные.Имя = ОбъектМД.Имя;
			СтрукДанные.ПолноеИмя = ОбъектМД.ПолноеИмя();
			СтрукДанные.Синоним = ОбъектМД.Представление();
			СтрукДанные.Комментарий = ОбъектМД.Комментарий;

			Для Каждого Элем Из ОбъектМД.Состав Цикл
				НС = ТабРезультат.Добавить();
				ЗаполнитьЗначенияСвойств(НС, СтрукДанные);

				НС.Объект = Элем.ПолноеИмя();
			КонецЦикла;
		КонецЦикла;

		ТабРезультат.Сортировать("Объект, Имя");
		ТабРезультат.Индексы.Добавить("Объект");

		АдресХранилища = ПоместитьВоВременноеХранилище(ТабРезультат, ?(АдресХранилища = "", УникальныйИдентификатор,
			АдресХранилища));
	КонецЕсли;

	Возврат ТабРезультат;
КонецФункции

&НаСервереБезКонтекста
Процедура вСформироватьКоллекциюПодсистем(Знач Подсистема = Неопределено, Знач Коллекция)
	Если Подсистема = Неопределено Тогда
		Для Каждого ОбъектМД Из Метаданные.Подсистемы Цикл
			вСформироватьКоллекциюПодсистем(ОбъектМД, Коллекция);
		КонецЦикла;
	Иначе
		Коллекция.Вставить(Подсистема);
		Для Каждого ОбъектМД Из Подсистема.Подсистемы Цикл
			Коллекция.Вставить(ОбъектМД);
			вСформироватьКоллекциюПодсистем(ОбъектМД, Коллекция);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция вПолучитьТаблицуРегистраторов(ИмяРегистра)
	Возврат вСформироватьТаблицуДвиженийДокументов(_АдресаХранилищ.Движения, УникальныйИдентификатор).Скопировать(
		Новый Структура("ИмяРегистра", ИмяРегистра));
КонецФункции

&НаСервере
Функция вПолучитьТаблицуПодписок(ИмяОбъекта)
	Возврат вСформироватьТаблицуПодписокНаСобытия(_АдресаХранилищ.Подписки, УникальныйИдентификатор).Скопировать(
		Новый Структура("Источник", ИмяОбъекта));
КонецФункции

&НаСервере
Функция вПолучитьТаблицуОбщихКоманд(ИмяОбъекта)
	Возврат вСформироватьТаблицуОбщихКоманд(_АдресаХранилищ.ОбщиеКоманды, УникальныйИдентификатор).Скопировать(
		Новый Структура("Параметр", ИмяОбъекта));
КонецФункции

&НаСервере
Функция вПолучитьТаблицуЧужихКоманд(ИмяОбъекта)
	Возврат вСформироватьТаблицуКоманд(_АдресаХранилищ.Команды, УникальныйИдентификатор).Скопировать(
		Новый Структура("Параметр", ИмяОбъекта));
КонецФункции

&НаСервере
Функция вПолучитьТаблицуПодсистем(ИмяОбъекта)
	Возврат вСформироватьТаблицуПодсистем(_АдресаХранилищ.Подсистемы, УникальныйИдентификатор).Скопировать(
		Новый Структура("Объект", ИмяОбъекта));
КонецФункции

&НаКлиенте
Функция вСформироватьСтруктуруНастроекФормыСвойствОбъекта()
	Струк = Новый Структура("_ПоказыватьПодпискиОбъекта, _ПоказыватьПодсистемыОбъекта, _ПоказыватьОбщиеКомандыОбъекта, _ПоказыватьЧужиеКомандыОбъекта");
	ЗаполнитьЗначенияСвойств(Струк, ЭтаФорма);

	Возврат Струк;
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Заголовок = Параметры.ПолноеИмя;

	_ПолноеИмя = Параметры.ПолноеИмя;
	;
	_ИмяФормыСписка = ".ФормаСписка";

	ПутьКФормам = Параметры.ПутьКФормам;

	_АдресаХранилищ = вСкопироватьСтруктуру(Параметры._АдресаХранилищ);

	_ДопПеременные = Новый Структура;
	_ДопПеременные.Вставить("ОписаниеПравДоступа", Параметры.ОписаниеПравДоступа);

	ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры.НастройкиОбработки);

	Элементы.ДеревоСвойств_ОбновитьНумерациюОбъектов.Видимость = вЕстьПраваАдминистратора();

	Элементы.ПраваДоступаДляРоли.Видимость = Ложь;
	Элементы.ПраваДоступаКОбъекту_Роли.Видимость = Истина;

	Элементы.СтраницаЗначение.Видимость = Ложь;
	Элементы.СтраницаЗависимыеОбъекты.Видимость = Ложь;
	Элементы.СтраницаУправлениеИтогами.Видимость = Ложь;

	Если Параметры.ПолноеИмя = "Конфигурация" Тогда
		вЗаполнитьСвойстваКонфигурации();
		Элементы.ДеревоСвойствкОткрытьФормуСписка.Видимость = Ложь;
		Элементы.ДеревоСвойствкОткрытьФормуСпискаДоп.Видимость = Ложь;
		Элементы.ДеревоСвойствкПоказатьСвойстваОбъекта.Видимость = Ложь;
		Элементы.СтраницаСтруктураХранения.Видимость = Ложь;
		Перейти ~Завершение;
	КонецЕсли;

	ЭтоПрочаяКоманда = (Найти(Параметры.ПолноеИмя, ".Команда.") <> 0);

	Если Не ЭтоПрочаяКоманда И Найти(Параметры.ПолноеИмя, "Подсистема.") <> 1 Тогда
		Если СтрЧислоВхождений(Параметры.ПолноеИмя, ".") <> 1 Тогда
			Отказ = Истина;
			Возврат;
		КонецЕсли;
	КонецЕсли;

	Элементы.СтраницаПраваДоступа.Видимость = вЕстьПраваАдминистратора();
	Если Элементы.СтраницаПраваДоступа.Видимость Тогда
		Элементы._ПравоДоступаКОбъекту.СписокВыбора.Очистить();

		пСписокПрав = _ДопПеременные.ОписаниеПравДоступа[?(ЭтоПрочаяКоманда, "ОбщаяКоманда", Лев(_ПолноеИмя, СтрНайти(
			_ПолноеИмя, ".") - 1))];
		Если пСписокПрав <> Неопределено Тогда
			пПравоДоступаПоУмолчанию = "";

			Для Каждого Элем Из Новый Структура(пСписокПрав) Цикл
				Элементы._ПравоДоступаКОбъекту.СписокВыбора.Добавить(Элем.Ключ);
				Если ПустаяСтрока(пПравоДоступаПоУмолчанию) Тогда
					пПравоДоступаПоУмолчанию = Элем.Ключ;
				КонецЕсли;
			КонецЦикла;

			_ПравоДоступаКОбъекту = пПравоДоступаПоУмолчанию;
		КонецЕсли;
	КонецЕсли;

	Если ЭтоПрочаяКоманда Тогда
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваОбщейКоманды(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Справочник.") = 1 Тогда
		вЗаполнитьСвойстваСправочника(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Документ.") = 1 Тогда
		вЗаполнитьСвойстваДокумента(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ЖурналДокументов.") = 1 Тогда
		вЗаполнитьСвойстваЖурналаДокументов(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПланВидовХарактеристик.") = 1 Тогда
		вЗаполнитьСвойстваПВХ(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПланВидовРасчета.") = 1 Тогда
		вЗаполнитьСвойстваПВР(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПланСчетов.") = 1 Тогда
		вЗаполнитьСвойстваПланаСчетов(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "РегистрСведений.") = 1 Тогда
		вЗаполнитьСвойстваРегистраСведений(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "РегистрНакопления.") = 1 Тогда
		вЗаполнитьСвойстваРегистраНакопления(Параметры.ПолноеИмя);
		вЗаполнитьСраницуУправленияИтогами(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "РегистрБухгалтерии.") = 1 Тогда
		вЗаполнитьСвойстваРегистраБухгалтерии(Параметры.ПолноеИмя);
		вЗаполнитьСраницуУправленияИтогами(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "РегистрРасчета.") = 1 Тогда
		вЗаполнитьСвойстваРегистраРасчета(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "БизнесПроцесс.") = 1 Тогда
		вЗаполнитьСвойстваБизнесПроцесса(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Задача.") = 1 Тогда
		вЗаполнитьСвойстваЗадачи(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПланОбмена.") = 1 Тогда
		вЗаполнитьСвойстваПланаОбмена(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Константа.") = 1 Тогда
		вЗаполнитьСвойстваКонстанты(Параметры.ПолноеИмя);
		Элементы.ДеревоСвойствкОткрытьФормуСписка.Видимость = Ложь;
		Элементы.ДеревоСвойствкОткрытьФормуСпискаДоп.Видимость = Ложь;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПараметрСеанса.") = 1 Тогда
		вЗаполнитьСвойстваПараметрСеанса(Параметры.ПолноеИмя);
		Элементы.ДеревоСвойствкОткрытьФормуСписка.Видимость = Ложь;
		Элементы.ДеревоСвойствкОткрытьФормуСпискаДоп.Видимость = Ложь;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Перечисление.") = 1 Тогда
		Элементы.СтраницаПраваДоступа.Видимость = Ложь;
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваПеречисления(Параметры.ПолноеИмя);
		Элементы.СтраницаЗависимыеОбъекты.Видимость = Истина;
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ОбщийМодуль.") = 1 Тогда
		Элементы.СтраницаПраваДоступа.Видимость = Ложь;
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваОбщегоМодуля(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ОбщаяКоманда.") = 1 Тогда
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваОбщейКоманды(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Подсистема.") = 1 Тогда
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваПодсистемы(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ОпределяемыйТип.") = 1 Тогда
		Элементы.СтраницаПраваДоступа.Видимость = Ложь;
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваОпределяемогоТипа(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "ПодпискаНаСобытие.") = 1 Тогда
		Элементы.СтраницаПраваДоступа.Видимость = Ложь;
		_ИмяФормыСписка = "";
		вЗаполнитьСвойстваПодпискиНаСобытие(Параметры.ПолноеИмя);
	ИначеЕсли Найти(Параметры.ПолноеИмя, "Роль.") = 1 Тогда
		Если Не Элементы.СтраницаПраваДоступа.Видимость Тогда
			Отказ = Истина;
			Возврат;
		КонецЕсли;

		_ИмяФормыСписка = "";
		Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
		Элементы.ПраваДоступаДляРоли.Видимость = Истина;
		Элементы.ПраваДоступаКОбъекту_Роли.Видимость = Ложь;
		Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаПраваДоступа;
		Элементы.СтраницаОбъект.Видимость = Ложь;
		Элементы.СтраницаСтруктураХранения.Видимость = Ложь;

		пСписокПрав =  "Чтение, Добавление, Изменение, Удаление, Просмотр, Редактирование, Использование, УправлениеИтогами, Проведение, ОтменаПроведения, Получение, Установка, Старт, Выполнение";
		Для Каждого Элем Из Новый Структура(пСписокПрав) Цикл
			Элементы._ПравоДоступаКОбъекту.СписокВыбора.Добавить(Элем.Ключ);
		КонецЦикла;

		_ПравоДоступаКОбъекту = "Чтение";
		Возврат;
	Иначе
		Отказ = Истина;
		Возврат;
	КонецЕсли;

	Элементы.ДеревоСвойств_ОткрытьОбъект.Видимость = (_ПустаяСсылкаНаОбъект <> Неопределено);

	ОбъектМД = Метаданные.НайтиПоПолномуИмени(Параметры.ПолноеИмя);
	Если ОбъектМД <> Неопределено Тогда
		ДанныеСХ = ПолучитьСтруктуруХраненияБазыДанных(вЗначениеВМассив(ОбъектМД),
			Не _ПоказыватьСтруктуруХраненияВТерминах1С);
		Если ДанныеСХ = Неопределено Или ДанныеСХ.Количество() = 0 Тогда
			Элементы.СтраницаСтруктураХранения.Видимость = ложь
		Иначе
			вЗаполнитьРазделСтруктураХранения(ДанныеСХ);
		КонецЕсли;
	Иначе
		Элементы.СтраницаСтруктураХранения.Видимость = ложь
	КонецЕсли
	;

	~Завершение: Для Каждого УзелДЗ Из ДеревоСвойств.ПолучитьЭлементы() Цикл
		УзелДЗ.ВидУзла = 1;
		
		//Если СтрНайти(УзелДЗ.ТипСтрокой, "Перечисление.") <> 0 Тогда
		//	Прервать;
		//КонецЕсли;

		Для Каждого РазделДЗ Из УзелДЗ.ПолучитьЭлементы() Цикл
			РазделДЗ.ВидУзла = 2;
		КонецЦикла;
	КонецЦикла;

	вУстановитьУсловноеОформление();
КонецПроцедуры

&НаСервере
Процедура вУстановитьУсловноеОформление()
	ЭтаФорма.УсловноеОформление.Элементы.Очистить();

	ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоСвойств.ВидУзла");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 1;
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(Элементы.ДеревоСвойств.Шрифт, , , Истина));
	ЭлементУО.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("ДеревоСвойствИмя");

	ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоСвойств.ВидУзла");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 2;
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСиний);
	ЭлементУО.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("ДеревоСвойствИмя");

	ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоСвойств.Индексирование");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ЭлементОтбора.ПравоеЗначение = "";
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСиний);
	//ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЖелтыйЗолотистый);
	ЭлементУО.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("ДеревоСвойств");

	ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("_ЗависимыеОбъекты.ВидУзла");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 1;
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(Элементы._ЗависимыеОбъекты.Шрифт, , , Истина));
	ЭлементУО.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("_ЗависимыеОбъектыИмя");

	ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("_ЗависимыеОбъекты.ВидУзла");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 2;
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСиний);
	ЭлементУО.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("_ЗависимыеОбъектыИмя");

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Для Каждого Элем Из ДеревоСвойств.ПолучитьЭлементы() Цикл
		РазвернутьВсе = (Ложь Или Найти(Элем.ТипСтрокой, "Конфигурация.") = 1 Или Найти(Элем.ТипСтрокой, "Подсистема.")
			= 1 Или Найти(Элем.ТипСтрокой, "ОбщийМодуль.") = 1 Или Найти(Элем.ТипСтрокой, "ОбщаяКоманда.") = 1
			Или Найти(Элем.ТипСтрокой, "ПодпискаНаСобытие.") = 1 Или Найти(Элем.ТипСтрокой, "ЖурналДокументов.") = 1
			Или Найти(Элем.ТипСтрокой, "ОпределяемыйТип.") = 1 Или Найти(Элем.ТипСтрокой, ".Команда.") <> 0);
		Элементы.ДеревоСвойств.Развернуть(Элем.ПолучитьИдентификатор(), РазвернутьВсе);
		Прервать;
	КонецЦикла;

	Если СтрНайти(_ПолноеИмя, "Роль.") = 1 И Не ПустаяСтрока(_ПравоДоступаКОбъекту) Тогда
		_ПравоДоступаКОбъектуПриИзменении(Элементы._ПравоДоступаКОбъекту);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _РазвернутьВсеУзлы(Команда)
	Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаОбъект Тогда
		Для Каждого Элем Из ДеревоСвойств.ПолучитьЭлементы() Цикл
			Элементы.ДеревоСвойств.Развернуть(Элем.ПолучитьИдентификатор(), Истина);
		КонецЦикла;
	ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаЗависимыеОбъекты Тогда
		Для Каждого Элем Из _ЗависимыеОбъекты.ПолучитьЭлементы() Цикл
			Элементы._ЗависимыеОбъекты.Развернуть(Элем.ПолучитьИдентификатор(), Истина);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _СвернутьВсеУзлы(Команда)
	Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаОбъект Тогда
		Для Каждого УзелДЗ Из ДеревоСвойств.ПолучитьЭлементы() Цикл
			Для Каждого Элем Из УзелДЗ.ПолучитьЭлементы() Цикл
				Элементы.ДеревоСвойств.Свернуть(Элем.ПолучитьИдентификатор());
			КонецЦикла;
		КонецЦикла;
	ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаЗависимыеОбъекты Тогда
		Для Каждого УзелДЗ Из _ЗависимыеОбъекты.ПолучитьЭлементы() Цикл
			Для Каждого Элем Из УзелДЗ.ПолучитьЭлементы() Цикл
				Элементы._ЗависимыеОбъекты.Свернуть(Элем.ПолучитьИдентификатор());
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура кОткрытьФормуСписка(Команда)
	СтрДЗ = ДеревоСвойств.НайтиПоИдентификатору(0);
	Если СтрДЗ <> Неопределено И Не ПустаяСтрока(_ИмяФормыСписка) Тогда
		Попытка
			ОткрытьФорму(СтрДЗ.ТипСтрокой + _ИмяФормыСписка);
		Исключение
			Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура кОткрытьФормуСпискаДоп(Команда)
	СтрДЗ = ДеревоСвойств.НайтиПоИдентификатору(0);
	Если СтрДЗ <> Неопределено И Не ПустаяСтрока(_ИмяФормыСписка) Тогда
		УИ_ОбщегоНазначенияКлиент.ОткрытьДинамическийСписок(СтрДЗ.ТипСтрокой);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура кПоказатьСвойстваОбъекта(Команда)
	ТекДанные = Элементы.ДеревоСвойств.ТекущиеДанные;
	Если ТекДанные <> Неопределено И Не ПустаяСтрока(ТекДанные.ТипСтрокой) Тогда
		Массив = вСтрокуТипаВМассив(ТекДанные.ТипСтрокой);
		Если Массив.Количество() = 1 Тогда
			вПоказатьСвойстваОбъекта(Массив[0]);
		ИначеЕсли Массив.Количество() > 1 Тогда
			Список = Новый СписокЗначений;
			Список.ЗагрузитьЗначения(Массив);
			Список.СортироватьПоЗначению();
			Попытка
				Список.ПоказатьВыборЭлемента(Новый ОписаниеОповещения("кПоказатьСвойстваОбъектаДалее", ЭтаФорма),
					"Выбор типа");
			Исключение
				ВыбранныйЭлемент = Неопределено;

				Список.ПоказатьВыборЭлемента(Новый ОписаниеОповещения("кПоказатьСвойстваОбъектаЗавершение", ЭтаФорма),
					"Выбор типа");
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура кПоказатьСвойстваОбъектаЗавершение(ВыбранныйЭлемент1, ДополнительныеПараметры) Экспорт

	ВыбранныйЭлемент = ВыбранныйЭлемент1;
	Если ВыбранныйЭлемент <> Неопределено Тогда
		кПоказатьСвойстваОбъектаДалее(ВыбранныйЭлемент, Неопределено);
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура кПоказатьСвойстваОбъектаДалее(ВыбранныйЭлемент, ДопПараметры) Экспорт
	Если ВыбранныйЭлемент <> Неопределено Тогда
		вПоказатьСвойстваОбъекта(ВыбранныйЭлемент.Значение);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _ОткрытьОбъект(Команда)
	СтрукПарам = Новый Структура;
	СтрукПарам.Вставить("мОбъектСсылка", _ПустаяСсылкаНаОбъект);
	ОткрытьФорму("Обработка.УИ_РедакторРеквизитовОбъекта.Форма.ФормаОбъекта", СтрукПарам, , ТекущаяДата());
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвойствВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтрДЗ = ДеревоСвойств.НайтиПоИдентификатору(ВыбраннаяСтрока);
	Если СтрДЗ.Ссылка <> Неопределено Тогда
		ПоказатьЗначение( , СтрДЗ.Ссылка);
	ИначеЕсли Не ПустаяСтрока(СтрДЗ.ТипСтрокой) Тогда
		кПоказатьСвойстваОбъекта(Неопределено);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура вПоказатьСвойстваОбъекта(ПолноеИмя)
	Если Не ПустаяСтрока(ПутьКФормам) Тогда
		Поз = СтрНайти(ПолноеИмя, ".Команда.");
		Если Поз <> 0 Тогда
			ИмяТипа = Лев(ПолноеИмя, Поз - 1);
		Иначе
			ИмяТипа = ПолноеИмя;
		КонецЕсли;

		СтрукПараметры = Новый Структура("ПолноеИмя, ПутьКФормам, _АдресаХранилищ, ОписаниеПравДоступа", ИмяТипа,
			ПутьКФормам, _АдресаХранилищ, _ДопПеременные.ОписаниеПравДоступа);
		СтрукПараметры.Вставить("НастройкиОбработки", вСформироватьСтруктуруНастроекФормыСвойствОбъекта());
		ОткрытьФорму(ПутьКФормам + "ФормаСвойств", СтрукПараметры, , ИмяТипа, , , , РежимОткрытияОкнаФормы.Независимый);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция вСтрокуТипаВМассив(ТипСтрокой)
	ПростыеТипы = "/Булево/Дата/ДатаВремя/Строка/Число/ХранилищеЗначения/УникальныйИдентификатор/";
	Результат = Новый Массив;

	Для Каждого Элем Из вСтрРазделить(ТипСтрокой, ",", Ложь) Цикл
		Если Найти(ПростыеТипы, Элем) = 0 Тогда
			Если Найти(Элем, "Строка(") = 0 И Найти(Элем, "Число(") = 0 Тогда
				Результат.Добавить(Элем);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция вСформироватьСтруктуруТипов()
	Результат = Новый Структура;

	Результат.Вставить("мТипСтрока", Тип("Строка"));
	Результат.Вставить("мТипБулево", Тип("Булево"));
	Результат.Вставить("мТипЧисло", Тип("Число"));
	Результат.Вставить("мТипДата", Тип("Дата"));
	Результат.Вставить("мТипСтруктура", Тип("Структура"));
	Результат.Вставить("мТипХранилищеЗначения", Тип("ХранилищеЗначения"));
	Результат.Вставить("мТипДвоичныеДанные", Тип("ДвоичныеДанные"));
	Результат.Вставить("мТипДеревоЗначений", Тип("ДеревоЗначений"));
	Результат.Вставить("мТипОбъектМетаданных", Тип("ОбъектМетаданных"));
	Результат.Вставить("мТипУникальныйИдентификатор", Тип("УникальныйИдентификатор"));

	Результат.Вставить("мТипNULL", Тип("NULL"));
	Результат.Вставить("мТипНЕОПРЕДЕЛЕНО", Тип("НЕОПРЕДЕЛЕНО"));
	Результат.Вставить("мТипОписаниеТипов", Тип("ОписаниеТипов"));
	Результат.Вставить("мТипВидДвиженияБухгалтерии", Тип("ВидДвиженияБухгалтерии"));
	Результат.Вставить("мТипВидДвиженияНакопления", Тип("ВидДвиженияНакопления"));
	Результат.Вставить("мТипВидСчета", Тип("ВидСчета"));
	Результат.Вставить("мТипФиксированныйМассив", Тип("ФиксированныйМассив"));
	Результат.Вставить("мТипФиксированнаяСтруктура", Тип("ФиксированнаяСтруктура"));
	Результат.Вставить("мТипФиксированноеСоответствие", Тип("ФиксированноеСоответствие"));

	Возврат Результат;
КонецФункции

&НаСервереБезКонтекста
Функция вИмяТипаСтрокой(СтрукТипы, Тип, ОписаниеТипов)
	ИмяТипа = "";

	Если Тип = СтрукТипы.мТипЧисло Тогда
		ИмяТипа = "Число";
		Если ОписаниеТипов.КвалификаторыЧисла.Разрядность <> 0 Тогда
			ИмяТипа = ИмяТипа + "(" + ОписаниеТипов.КвалификаторыЧисла.Разрядность + "."
				+ ОписаниеТипов.КвалификаторыЧисла.РазрядностьДробнойЧасти + ")";
		КонецЕсли;
	ИначеЕсли Тип = СтрукТипы.мТипСтрока Тогда
		ИмяТипа = "Строка";
		Если ОписаниеТипов.КвалификаторыСтроки.Длина <> 0 Тогда
			ИмяТипа = ИмяТипа + "(" + ?(ОписаниеТипов.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная,
				"П", "Ф") + ОписаниеТипов.КвалификаторыСтроки.Длина + ")";
		КонецЕсли;
	ИначеЕсли Тип = СтрукТипы.мТипДата Тогда
		ИмяТипа = ?(ОписаниеТипов.КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Время, "Время", ?(
			ОписаниеТипов.КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Дата, "Дата", "ДатаВремя"));
	ИначеЕсли Тип = СтрукТипы.мТипБулево Тогда
		ИмяТипа = "Булево";
	ИначеЕсли Тип = СтрукТипы.мТипДвоичныеДанные Тогда
		ИмяТипа = "ДвоичныеДанные";
	ИначеЕсли Тип = СтрукТипы.мТипХранилищеЗначения Тогда
		ИмяТипа = "ХранилищеЗначения";
	ИначеЕсли Тип = СтрукТипы.мТипУникальныйИдентификатор Тогда
		ИмяТипа = "УникальныйИдентификатор";

	ИначеЕсли Тип = СтрукТипы.мТипNULL Тогда
		ИмяТипа = "NULL";
	ИначеЕсли Тип = СтрукТипы.мТипНЕОПРЕДЕЛЕНО Тогда
		ИмяТипа = "НЕОПРЕДЕЛЕНО";
	ИначеЕсли Тип = СтрукТипы.мТипОписаниеТипов Тогда
		ИмяТипа = "ОписаниеТипов";
	ИначеЕсли Тип = СтрукТипы.мТипВидДвиженияБухгалтерии Тогда
		ИмяТипа = "ВидДвиженияБухгалтерии";
	ИначеЕсли Тип = СтрукТипы.мТипВидДвиженияНакопления Тогда
		ИмяТипа = "ВидДвиженияНакопления";
	ИначеЕсли Тип = СтрукТипы.мТипВидСчета Тогда
		ИмяТипа = "ВидСчета";
	ИначеЕсли Тип = СтрукТипы.мТипФиксированныйМассив Тогда
		ИмяТипа = "ФиксированныйМассив";
	ИначеЕсли Тип = СтрукТипы.мТипФиксированнаяСтруктура Тогда
		ИмяТипа = "ФиксированнаяСтруктура";
	ИначеЕсли Тип = СтрукТипы.мТипФиксированноеСоответствие Тогда
		ИмяТипа = "ФиксированноеСоответствие";

	Иначе
		ОбъектМД = Метаданные.НайтиПоТипу(Тип);
		Если ОбъектМД <> Неопределено Тогда
			ИмяТипа = ОбъектМД.ПолноеИмя();
		Иначе
			ИмяТипа = Строка(Тип);
		КонецЕсли;
	КонецЕсли;

	Возврат ИмяТипа;
КонецФункции

&НаСервереБезКонтекста
Функция вОписаниеТиповВСтроку(ОписаниеТипов)
	Если ОписаниеТипов = Неопределено Тогда
		Возврат "";
	КонецЕсли;

	СтрукТипы = вСформироватьСтруктуруТипов();

	Значение = "";
	Типы = ОписаниеТипов.Типы();
	Для Каждого Элем Из Типы Цикл
		ИмяТипа = вИмяТипаСтрокой(СтрукТипы, Элем, ОписаниеТипов);
		Если Не ПустаяСтрока(ИмяТипа) Тогда
			Значение = Значение + "," + ИмяТипа;
		КонецЕсли;
	КонецЦикла;

	Возврат Сред(Значение, 2);
КонецФункции
&НаСервере
Функция вСформироватьТаблицуСвойств()
	ТипСтрока = Новый ОписаниеТипов("Строка");

	ТабРезультат = Новый ТаблицаЗначений;
	ТабРезультат.Колонки.Добавить("Имя", ТипСтрока);
	ТабРезультат.Колонки.Добавить("Индексирование", ТипСтрока);
	ТабРезультат.Колонки.Добавить("Синоним", ТипСтрока);
	ТабРезультат.Колонки.Добавить("Комментарий", ТипСтрока);
	ТабРезультат.Колонки.Добавить("ТипСтрокой", ТипСтрока);

	Возврат ТабРезультат;
КонецФункции

&НаСервере
Процедура вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств)
	РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
	РазделДЗ.Имя = "Свойства";

	ТипОбъектМД = Тип("ОбъектМетаданных");
	ТипОписаниеТипов = Тип("ОписаниеТипов");

	Попытка
		// начиная с версии 8.3.8 (надо контролировать версию)
		пРасширениеКонфигурации = ОбъектМД.РасширениеКонфигурации();
		Если пРасширениеКонфигурации <> Неопределено Тогда
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			СтрДЗ.Имя = "РасширениеКонфигурации";
			СтрДЗ.Синоним = пРасширениеКонфигурации.Имя;
			СтрДЗ.ТипСтрокой = "РасширениеКонфигурации";
			СтрДЗ.Комментарий = пРасширениеКонфигурации.Синоним;
		КонецЕсли;
	Исключение
	КонецПопытки;

	Струк = Новый Структура(ПереченьСвойств);
	ЗаполнитьЗначенияСвойств(Струк, ОбъектМД);
	Для Каждого Элем Из Струк Цикл
		СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
		СтрДЗ.Имя = Элем.Ключ;
		СтрДЗ.Синоним = Элем.Значение;
		Если Элем.Значение <> Неопределено Тогда
			пТипЗнч = ТипЗнч(Элем.Значение);
			Если пТипЗнч = ТипОбъектМД Тогда
				СтрДЗ.ТипСтрокой = Элем.Значение.ПолноеИмя();
			ИначеЕсли пТипЗнч = ТипОписаниеТипов Тогда
				СтрДЗ.ТипСтрокой = вОписаниеТиповВСтроку(Элем.Значение);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// начиная с версии 8.3.8 (надо контролировать версию)
	//Попытка
	//	Х = ОбъектМД.РасширениеКонфигурации();
	//	Если Х <> Неопределено Тогда
	//		СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
	//		СтрДЗ.Имя = "РасширениеКонфигурации";
	//		СтрДЗ.Синоним = Х.Имя;
	//	КонецЕсли;
	//Исключение
	//КонецПопытки;
КонецПроцедуры

&НаСервереБезКонтекста
Функция вПолучитьСвойстовоИндексирование(Знач ОбъектМД)
	Струк = Новый Структура("Индексирование");
	пСвойствоИндексирование = Метаданные.СвойстваОбъектов.Индексирование;

	ЗаполнитьЗначенияСвойств(Струк, ОбъектМД);
	Если Струк.Индексирование = Неопределено Тогда
		Значение = "";
	ИначеЕсли Струк.Индексирование = пСвойствоИндексирование.НеИндексировать Тогда
		Значение = "";
	Иначе
		Значение = Струк.Индексирование;
	КонецЕсли;

	Возврат Значение;
КонецФункции

&НаСервере
Процедура вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, ИмяГруппы, Сортировать = Истина, ВыводитьКоличество = Ложь)
	Если ОбъектМД[ИмяГруппы].Количество() <> 0 Тогда
		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из ОбъектМД[ИмяГруппы] Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Индексирование = вПолучитьСвойстовоИндексирование(Элем);
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = вОписаниеТиповВСтроку(Элем.Тип);
		КонецЦикла;

		Если Сортировать Тогда
			Таблица.Сортировать("Имя");
		КонецЕсли;

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = ИмяГруппы;
		Если ВыводитьКоличество Тогда
			РазделДЗ.Имя = РазделДЗ.Имя + " (" + Таблица.Количество() + ")";
		КонецЕсли;

		Для Каждого Стр Из Таблица Цикл
			ЗаполнитьЗначенияСвойств(РазделДЗ.ПолучитьЭлементы().Добавить(), Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ)
	Если вПроверитьНаличиеСвойства(ОбъектМД, "Команды") И ОбъектМД.Команды.Количество() <> 0 Тогда
		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из ОбъектМД.Команды Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;

		Таблица.Сортировать("Имя");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Команды (" + Таблица.Количество() + ")";

		Для Каждого Стр Из Таблица Цикл
			ЗаполнитьЗначенияСвойств(РазделДЗ.ПолучитьЭлементы().Добавить(), Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ)
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Реквизиты", Истина, Истина);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ)
	Список = Новый СписокЗначений;
	Для Каждого Элем Из ОбъектМД.ТабличныеЧасти Цикл
		Список.Добавить(Элем.Имя);
	КонецЦикла;
	Список.СортироватьПоЗначению();

	Для Каждого ЭлемХ Из Список Цикл
		Элем = ОбъектМД.ТабличныеЧасти[ЭлемХ.Значение];
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "ТЧ." + Элем.Имя;

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого ЭлемТЧ Из Элем.Реквизиты Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = ЭлемТЧ.Имя;
			Стр.Синоним = ЭлемТЧ.Представление();
			Стр.Комментарий = ЭлемТЧ.Комментарий;
			Стр.ТипСтрокой = вОписаниеТиповВСтроку(ЭлемТЧ.Тип);
		КонецЦикла;
		Таблица.Сортировать("Имя");

		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьТипыЗначенийХарактеристик(ОбъектМД, УзелДЗ)
	Массив = ОбъектМД.Тип.Типы();

	Если Массив.Количество() <> 0 Тогда
		Таблица = вСформироватьТаблицуСвойств();
		Таблица.Колонки.Добавить("НПП", Новый ОписаниеТипов("Число"));

		СтрукТипы = вСформироватьСтруктуруТипов();

		Для Каждого Элем Из Массив Цикл
			ЭлемМД = Метаданные.НайтиПоТипу(Элем);

			Стр = Таблица.Добавить();
			Если ЭлемМД <> Неопределено Тогда
				Стр.Имя = ЭлемМД.Имя;
				Стр.Синоним = ЭлемМД.Представление();
				Стр.Комментарий = "";
				Стр.ТипСтрокой = ЭлемМД.ПолноеИмя();
			Иначе
				ИмяТипа = вИмяТипаСтрокой(СтрукТипы, Элем, ОбъектМД.Тип);

				Стр.НПП = -1;
				Стр.Имя = Элем;
				Стр.Синоним = Элем;
				Стр.Комментарий = "";
				Стр.ТипСтрокой = ИмяТипа;
			КонецЕсли;
		КонецЦикла;

		Если ОбъектМД.ДополнительныеЗначенияХарактеристик <> Неопределено Тогда
			ЭлемМД = ОбъектМД.ДополнительныеЗначенияХарактеристик;

			Если Таблица.Найти(ЭлемМД.ПолноеИмя(), "ТипСтрокой") = Неопределено Тогда
				Стр = Таблица.Добавить();
				Стр.Имя = ЭлемМД.Имя;
				Стр.Синоним = ЭлемМД.Представление();
				Стр.Комментарий = "";
				Стр.ТипСтрокой = ЭлемМД.ПолноеИмя();
			КонецЕсли;
		КонецЕсли;

		Таблица.Сортировать("НПП, ТипСтрокой");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "ТипыЗначенийХарактеристик (" + Таблица.Количество() + ")";

		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьПредопределенныеЭлементыОбъекта(ОбъектМД, УзелДЗ)
	Если Метаданные.Справочники.Содержит(ОбъектМД) Тогда
		Менеджер = Справочники;
	ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМД) Тогда
		Менеджер = ПланыВидовРасчета;
	ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМД) Тогда
		Менеджер = ПланыВидовХарактеристик;
	ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМД) Тогда
		Менеджер = ПланыСчетов;
	Иначе
		Возврат;
	КонецЕсли;

	Менеджер = Менеджер[ОбъектМД.Имя];

	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ Ссылка, Представление КАК Наименование ИЗ " + ОбъектМД.ПолноеИмя() + " ГДЕ Предопределенный";

	Попытка
		ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
	Исключение
		// при отсутствии прав доступа
		ТаблицаЗначений = Новый ТаблицаЗначений;
	КонецПопытки;

	Если ТаблицаЗначений.Количество() <> 0 Тогда
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Предопределенные (" + ТаблицаЗначений.Количество() + ")";

		Для Каждого Элем Из ТаблицаЗначений Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			СтрДЗ.Имя = Менеджер.ПолучитьИмяПредопределенного(Элем.Ссылка);
			СтрДЗ.Синоним = Элем.Наименование;
			СтрДЗ.Комментарий = "";
			СтрДЗ.ТипСтрокой = "Ссылка";
			СтрДЗ.Ссылка = Элем.Ссылка;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойствоКоллекцияОбъекта(ОбъектМД, УзелДЗ, ИмяКоллекции, Сортировать = Истина,
	ПолеСортировки = "Имя")
	Если ОбъектМД[ИмяКоллекции].Количество() <> 0 Тогда
		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из ОбъектМД[ИмяКоллекции] Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;

		Если Сортировать Тогда
			Таблица.Сортировать(ПолеСортировки);
		КонецЕсли;

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = ИмяКоллекции + " (" + Таблица.Количество() + ")";
		Для Каждого Элем Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьВладельцевОбъекта(ОбъектМД, УзелДЗ)
	вЗаполнитьСвойствоКоллекцияОбъекта(ОбъектМД, УзелДЗ, "Владельцы");
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьГрафыЖурнала(ОбъектМД, УзелДЗ)
	Если ОбъектМД.Графы.Количество() <> 0 Тогда
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Графы";
		Для Каждого Элем Из ОбъектМД.Графы Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			СтрДЗ.Имя = Элем.Имя;
			СтрДЗ.Синоним = Элем.Представление();
			СтрДЗ.Комментарий = Элем.Комментарий;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьДвиженияОбъекта(ОбъектМД, УзелДЗ)
	Если ОбъектМД.Движения.Количество() <> 0 Тогда

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из ОбъектМД.Движения Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;
		Таблица.Сортировать("ТипСтрокой");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Движения (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьИсточникиСобытия(ОбъектМД, УзелДЗ)
	МассивТипов = ОбъектМД.Источник.Типы();
	Если МассивТипов.Количество() <> 0 Тогда

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Тип Из МассивТипов Цикл
			Элем = Метаданные.НайтиПоТипу(Тип);

			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;
		Таблица.Сортировать("ТипСтрокой");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Источники (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьПараметрыКоманды(ОбъектМД, УзелДЗ)
	МассивТипов = ОбъектМД.ТипПараметраКоманды.Типы();
	Если МассивТипов.Количество() <> 0 Тогда

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Тип Из МассивТипов Цикл
			Элем = Метаданные.НайтиПоТипу(Тип);

			Стр = Таблица.Добавить();
			Стр.Имя = Элем.Имя;
			Стр.Синоним = Элем.Представление();
			Стр.Комментарий = Элем.Комментарий;
			Стр.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;
		Таблица.Сортировать("ТипСтрокой");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Параметры команды (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьРегистраторовОбъекта(ОбъектМД, УзелДЗ)
	ТабРезультат = вПолучитьТаблицуРегистраторов(ОбъектМД.ПолноеИмя());
	Если ТабРезультат.Количество() <> 0 Тогда
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Регистраторы (" + ТабРезультат.Количество() + ")";
		Для Каждого Элем Из ТабРезультат Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ)
	Если _ПоказыватьПодпискиОбъекта Тогда
		ТабРезультат = вПолучитьТаблицуПодписок(ОбъектМД.ПолноеИмя());
		Если ТабРезультат.Количество() <> 0 Тогда
			РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
			РазделДЗ.Имя = "ПодпискиНаСобытия (" + ТабРезультат.Количество() + ")";
			Для Каждого Элем Из ТабРезультат Цикл
				СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
				ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
				СтрДЗ.ТипСтрокой = "ПодпискаНаСобытие." + Элем.Имя;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ)
	Если _ПоказыватьПодсистемыОбъекта Тогда
		ТабРезультат = вПолучитьТаблицуПодсистем(ОбъектМД.ПолноеИмя());
		Если ТабРезультат.Количество() <> 0 Тогда
			РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
			РазделДЗ.Имя = "Подсистемы (" + ТабРезультат.Количество() + ")";
			Для Каждого Элем Из ТабРезультат Цикл
				СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
				ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
				СтрДЗ.ТипСтрокой = Элем.ПолноеИмя;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ)
	Если _ПоказыватьОбщиеКомандыОбъекта Тогда
		ТабРезультат = вПолучитьТаблицуОбщихКоманд(ОбъектМД.ПолноеИмя());
		Если ТабРезультат.Количество() <> 0 Тогда
			РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
			РазделДЗ.Имя = "ОбщиеКоманды (" + ТабРезультат.Количество() + ")";
			Для Каждого Элем Из ТабРезультат Цикл
				СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
				ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
				СтрДЗ.ТипСтрокой = "ОбщаяКоманда." + Элем.Имя;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ)
	Если _ПоказыватьЧужиеКомандыОбъекта Тогда
		ТабРезультат = вПолучитьТаблицуЧужихКоманд(ОбъектМД.ПолноеИмя());
		Если ТабРезультат.Количество() <> 0 Тогда
			РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
			РазделДЗ.Имя = "ЧужиеКоманды (" + ТабРезультат.Количество() + ")";
			Для Каждого Элем Из ТабРезультат Цикл
				СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
				ЗаполнитьЗначенияСвойств(СтрДЗ, Элем);
				СтрДЗ.ТипСтрокой = Элем.Имя;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ)
	Если ОбъектМД.СтандартныеРеквизиты.Количество() <> 0 Тогда
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "СтандартныеРеквизиты";
		Для Каждого Элем Из ОбъектМД.СтандартныеРеквизиты Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			СтрДЗ.Имя = Элем.Имя;
			СтрДЗ.Синоним = Элем.Представление();
			СтрДЗ.Комментарий = Элем.Комментарий;
			//СтрДЗ.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСпецСвойствоОбъекта(ОбъектМД, УзелДЗ, ИмяСвойства)
	Если ОбъектМД[ИмяСвойства].Количество() <> 0 Тогда
		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = ИмяСвойства;
		Для Каждого Элем Из ОбъектМД[ИмяСвойства] Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			СтрДЗ.Имя = Элем.Имя;
			СтрДЗ.Синоним = Элем.Представление();
			СтрДЗ.Комментарий = Элем.Комментарий;
			СтрДЗ.ТипСтрокой = Элем.ПолноеИмя();
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваКонфигурации()
	ОбъектМД = Метаданные;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ОбъектМД.ПолноеИмя();

	ПереченьСвойств = "
					  |АвторскиеПрава, АдресИнформацииОКонфигурации, АдресИнформацииОПоставщике, АдресКаталогаОбновлений,
					  |ВариантВстроенногоЯзыка, Версия, ВключатьСправкуВСодержание,
					  |ИспользоватьОбычныеФормыВУправляемомПриложении, ИспользоватьУправляемыеФормыВОбычномПриложении,
					  |ОсновнаяФормаВариантаОтчета, ОсновнаяФормаКонстант, ОсновнаяФормаНастроекДинамическогоСписка, ОсновнаяФормаНастроекОтчета, ОсновнаяФормаОтчета, ОсновнаяФормаПоиска,
					  |ОсновнойИнтерфейс, ОсновнойРежимЗапуска, ОсновнойЯзык,
					  |РежимАвтонумерацииОбъектов, РежимИспользованияМодальности, РежимИспользованияСинхронныхВызововРасширенийПлатформыИВнешнихКомпонент,
					  |РежимОсновногоОкнаКлиентскогоПриложения, РежимСовместимости, РежимСовместимостиИнтерфейса, РежимУправленияБлокировкойДанных";

	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваСправочника(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = Справочники[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Автонумерация, Иерархический, ВидИерархии, ГруппыСверху, ТипКода, ДлинаКода, ДлинаНаименования, КонтрольУникальности, СерииКодов, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьВладельцевОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПредопределенныеЭлементыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваДокумента(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = Документы[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Автонумерация, ДлинаНомера, ОперативноеПроведение, Проведение, КонтрольУникальности, ПериодичностьНомера, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьДвиженияОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваЖурналаДокументов(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьГрафыЖурнала(ОбъектМД, УзелДЗ);
	вЗаполнитьСвойствоКоллекцияОбъекта(ОбъектМД, УзелДЗ, "РегистрируемыеДокументы");
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПВХ(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = ПланыВидовХарактеристик[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Автонумерация, Иерархический, ГруппыСверху, ДлинаКода, ДлинаНаименования, КонтрольУникальности, СерииКодов, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТипыЗначенийХарактеристик(ОбъектМД, УзелДЗ);
	вЗаполнитьПредопределенныеЭлементыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПВР(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = ПланыВидовРасчета[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ДлинаКода, ДлинаНаименования, ТипКода, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПредопределенныеЭлементыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПланаСчетов(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = ПланыСчетов[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "АвтоПорядокПоКоду, ДлинаКода, ДлинаНаименования, ДлинаПорядка, КонтрольУникальности, МаскаКода, СерииКодов, ПоляБлокировкиДанных, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьСпецСвойствоОбъекта(ОбъектМД, УзелДЗ, "ПризнакиУчета");
	вЗаполнитьСпецСвойствоОбъекта(ОбъектМД, УзелДЗ, "ПризнакиУчетаСубконто");
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПредопределенныеЭлементыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваРегистраСведений(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ПериодичностьРегистраСведений, РежимЗаписи, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Измерения", Ложь);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Ресурсы", Истина);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Реквизиты", Истина);
	вЗаполнитьРегистраторовОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваРегистраНакопления(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ВидРегистра, РазрешитьРазделениеИтогов, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Измерения", Ложь);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Ресурсы", Истина);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Реквизиты", Истина);
	вЗаполнитьРегистраторовОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваРегистраБухгалтерии(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Корреспонденция, ПланСчетов, РазрешитьРазделениеИтогов, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Измерения", Ложь);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Ресурсы", Истина);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Реквизиты", Истина);
	вЗаполнитьРегистраторовОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваРегистраРасчета(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "БазовыйПериод, ПериодДействия, Периодичность, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Измерения", Ложь);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Ресурсы", Истина);
	вЗаполнитьГруппуСвойствОбъекта(ОбъектМД, УзелДЗ, "Реквизиты", Истина);
	вЗаполнитьРегистраторовОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваБизнесПроцесса(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = БизнесПроцессы[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Автонумерация, ДлинаНомера, Задача, ТипНомера, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваЗадачи(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = Задачи[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Автонумерация, Адресация, ДлинаНомера, ДлинаНаименования, КонтрольУникальности, ТипНомера, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПланаОбмена(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	_ПустаяСсылкаНаОбъект = ПланыОбмена[ОбъектМД.Имя].ПустаяСсылка();

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ДлинаКода, ДлинаНаименования, ДопустимаяДлинаКода, РежимУправленияБлокировкойДанных";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСтандартныеРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьРеквизитыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьТабличныеЧастиОбъекта(ОбъектМД, УзелДЗ);

	Если ОбъектМД.Состав.Количество() <> 0 Тогда
		СтрукТипы = вСформироватьСтруктуруТипов();

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из ОбъектМД.Состав Цикл
			Стр = Таблица.Добавить();
			//Стр.Имя = Элем.Метаданные.Имя;
			//Стр.Имя = Элем.Метаданные.Имя + " (" + Элем.АвтоРегистрация + ")";
			Стр.Имя = "АвтоРегистрация: " + Элем.АвтоРегистрация;
			Стр.Синоним = Элем.Метаданные.Представление();
			Стр.Комментарий = Элем.Метаданные.Комментарий;
			Стр.ТипСтрокой = Элем.Метаданные.ПолноеИмя();
		КонецЦикла;
		Таблица.Сортировать("ТипСтрокой");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Состав (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;

	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПеречисления(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	Для Каждого Элем Из ОбъектМД.ЗначенияПеречисления Цикл
		СтрДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		СтрДЗ.Имя = Элем.Имя;
		СтрДЗ.Синоним = Элем.Представление();
		СтрДЗ.Комментарий = Элем.Комментарий;
	КонецЦикла;

	вЗаполнитьКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваОбщегоМодуля(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ВнешнееСоединение, ВызовСервера, Глобальный, КлиентОбычноеПриложение, КлиентУправляемоеПриложение, ПовторноеИспользованиеВозвращаемыхЗначений, Привилегированный, Сервер";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваКонстанты(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	МассивТипов = ОбъектМД.Тип.Типы();
	Если МассивТипов.Количество() <> 0 Тогда
		СтрукТипы = вСформироватьСтруктуруТипов();

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из МассивТипов Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = вИмяТипаСтрокой(СтрукТипы, Элем, ОбъектМД.Тип);
			Стр.Синоним = Элем;
			Стр.ТипСтрокой = Стр.Имя;
		КонецЦикла;
		Таблица.Сортировать("Имя");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Типы (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;

	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
	
	// проверка прав
	Если Не ПравоДоступа("Чтение", ОбъектМД) Тогда
		Возврат;
	КонецЕсли;

	Элементы.СтраницаЗначение.Видимость = Истина;
	Элементы._ЗначениеКонстанты.ОграничениеТипа = ОбъектМД.Тип;
	Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр = Не ОбъектМД.Тип.СодержитТип(Тип("Строка"));
	Элементы._ИспользоватьТекстПриЗаписиКонстанты.ТолькоПросмотр = Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр;

	пСтрук = вПрочитатьКонстанту(_ПолноеИмя);
	Если пСтрук.Отказ Тогда
		_ТипЗначенияКонстанты = пСтрук.ПричинаОтказа;
	Иначе
		_ЗначениеКонстанты = пСтрук.Значение;
		_ТипЗначенияКонстанты = пСтрук.ТипЗначения;
		Если ТипЗнч(пСтрук.Значение) = Тип("Строка") Тогда
			_ТекстовоеЗначениеКостанты = пСтрук.Значение;
		Иначе
			_ТекстовоеЗначениеКостанты = пСтрук.Текст;
		КонецЕсли;
	КонецЕсли;

	Если пСтрук.ТолькоПросмотр Тогда
		Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр = Истина;
		Элементы._ЗначениеКонстанты.ТолькоПросмотр = Истина;
		Элементы._ЗаписатьКонстанту.Доступность = Ложь;
	КонецЕсли;

	Элементы._ИспользоватьТекстПриЗаписиКонстанты.ТолькоПросмотр = Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПараметрСеанса(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	МассивТипов = ОбъектМД.Тип.Типы();
	Если МассивТипов.Количество() <> 0 Тогда
		СтрукТипы = вСформироватьСтруктуруТипов();

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из МассивТипов Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = вИмяТипаСтрокой(СтрукТипы, Элем, ОбъектМД.Тип);
			Стр.Синоним = Элем;
			Стр.ТипСтрокой = Стр.Имя;
		КонецЦикла;
		Таблица.Сортировать("Имя");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Типы (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;

	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
	
	// проверка прав
	Если Не ПравоДоступа("Получение", ОбъектМД) Тогда
		Возврат;
	КонецЕсли;

	Элементы.СтраницаЗначение.Видимость = Истина;
	Элементы._ЗначениеКонстанты.ОграничениеТипа = ОбъектМД.Тип;
	Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр = Не ОбъектМД.Тип.СодержитТип(Тип("Строка"));
	Элементы._ИспользоватьТекстПриЗаписиКонстанты.ТолькоПросмотр = Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр;

	пСтрук = вПрочитатьКонстанту(_ПолноеИмя);
	Если пСтрук.Отказ Тогда
		_ТипЗначенияКонстанты = пСтрук.ПричинаОтказа;
	Иначе
		_ЗначениеКонстанты = пСтрук.Значение;
		_ТипЗначенияКонстанты = пСтрук.ТипЗначения;
		Если ТипЗнч(пСтрук.Значение) = Тип("Строка") Тогда
			_ТекстовоеЗначениеКостанты = пСтрук.Значение;
		Иначе
			_ТекстовоеЗначениеКостанты = пСтрук.Текст;
		КонецЕсли;
	КонецЕсли;

	Если пСтрук.ТолькоПросмотр Тогда
		Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр = Истина;
		Элементы._ЗначениеКонстанты.ТолькоПросмотр = Истина;
		Элементы._ЗаписатьКонстанту.Доступность = Ложь;
	КонецЕсли;

	Элементы._ИспользоватьТекстПриЗаписиКонстанты.ТолькоПросмотр = Элементы._ТекстовоеЗначениеКостанты.ТолькоПросмотр;

	Элементы._ЗначениеКонстанты.Заголовок = "Значение параметра";
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваОбщейКоманды(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Группа, ИзменяетДанные, Отображение, Подсказка, РежимИспользованияПараметра";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьПараметрыКоманды(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПодпискиНаСобытие(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "Обработчик, Событие";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьИсточникиСобытия(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваПодсистемы(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	ПереченьСвойств = "ВключатьВКомандныйИнтерфейс, Пояснение";
	вЗаполнитьСвойстваОбъекта(ОбъектМД, УзелДЗ, ПереченьСвойств);
	вЗаполнитьСвойствоКоллекцияОбъекта(ОбъектМД, УзелДЗ, "Подсистемы");
	вЗаполнитьСвойствоКоллекцияОбъекта(ОбъектМД, УзелДЗ, "Состав", Истина, "ТипСтрокой");
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСвойстваОпределяемогоТипа(ПолноеИмя)
	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;

	УзелДЗ = ДеревоСвойств.ПолучитьЭлементы().Добавить();
	УзелДЗ.Имя = ОбъектМД.Имя;
	УзелДЗ.Синоним = ОбъектМД.Представление();
	УзелДЗ.Комментарий = ОбъектМД.Комментарий;
	УзелДЗ.ТипСтрокой = ПолноеИмя;

	МассивТипов = ОбъектМД.Тип.Типы();
	Если МассивТипов.Количество() <> 0 Тогда
		СтрукТипы = вСформироватьСтруктуруТипов();

		Таблица = вСформироватьТаблицуСвойств();
		Для Каждого Элем Из МассивТипов Цикл
			Стр = Таблица.Добавить();
			Стр.Имя = вИмяТипаСтрокой(СтрукТипы, Элем, ОбъектМД.Тип);
			Стр.Синоним = Элем;
			Стр.ТипСтрокой = Стр.Имя;
		КонецЦикла;
		Таблица.Сортировать("Имя");

		РазделДЗ = УзелДЗ.ПолучитьЭлементы().Добавить();
		РазделДЗ.Имя = "Типы (" + Таблица.Количество() + ")";
		Для Каждого Стр Из Таблица Цикл
			СтрДЗ = РазделДЗ.ПолучитьЭлементы().Добавить();
			ЗаполнитьЗначенияСвойств(СтрДЗ, Стр);
		КонецЦикла;
	КонецЕсли;

	вЗаполнитьОбщиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьЧужиеКомандыОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодпискиОбъекта(ОбъектМД, УзелДЗ);
	вЗаполнитьПодсистемыОбъекта(ОбъектМД, УзелДЗ);
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьСраницуУправленияИтогами(ПолноеИмя)
	Попытка
		пСтрук = вПолучитьСвойстваРегистраДляУправленияИтогами(ПолноеИмя);
	Исключение
		Возврат;
	КонецПопытки;

	Если Не пСтрук.ЕстьДанные Тогда
		Возврат;
	КонецЕсли;

	Элементы.СтраницаУправлениеИтогами.Видимость = Истина;

	_РежимАгрегатов = пСтрук.РежимАгрегатов;
	_ИспользованиеАгрегатов = пСтрук.ИспользованиеАгрегатов;
	_ИспользованиеИтогов = пСтрук.ИспользованиеИтогов;
	_ИспользованиеТекущихИтогов = пСтрук.ИспользованиеТекущихИтогов;
	_РежимРазделенияИтогов = пСтрук.РежимРазделенияИтогов;
	_МинимальныйПериодРассчитанныхИтогов = пСтрук.МинимальныйПериодРассчитанныхИтогов;
	_МаксимальныйПериодРассчитанныхИтогов = пСтрук.МаксимальныйПериодРассчитанныхИтогов;

	Элементы._РежимАгрегатов.Видимость = Не пСтрук.ЭтоРегистрБУ;
	Элементы._РежимАгрегатов.Доступность = пСтрук.ЕстьРежимАгрегатов;
	Элементы._ИспользованиеАгрегатов.Видимость = Не пСтрук.ЭтоРегистрБУ;
	Элементы._ИспользованиеАгрегатов.Доступность = пСтрук.ЕстьРежимАгрегатов И _РежимАгрегатов;

	Элементы._ИспользованиеИтогов.Доступность = Не _РежимАгрегатов;
	Элементы._ИспользованиеТекущихИтогов.Доступность = пСтрук.ЕстьТекущиеИтоги И Не _РежимАгрегатов;

	Элементы._ПересчитатьИтоги.Доступность = Не _РежимАгрегатов;
	Элементы._ПересчитатьТекущиеИтоги.Доступность = пСтрук.ЕстьТекущиеИтоги И Не _РежимАгрегатов;

	Элементы.ГруппаПересчетИтоговЗаПериод.Доступность = Не _РежимАгрегатов;
	Элементы.ГруппаПериодРассчитанныхИтогов.Доступность = Не пСтрук.ОборотныйРегистр И Не _РежимАгрегатов;

КонецПроцедуры

&НаСервереБезКонтекста
Функция вПолучитьСвойстваРегистраДляУправленияИтогами(ПолноеИмя)
	пСтрук = Новый Структура("ЕстьДанные, ЭтоРегистрБУ, ОборотныйРегистр", Ложь, Ложь, Ложь);

	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат пСтрук;
	КонецЕсли;

	пСтрук.ЕстьДанные = Истина;
	пСтрук.Вставить("Имя", ОбъектМД.Имя);

	пПустаяДата = '00010101';
	пСтрук.Вставить("Дата1", пПустаяДата);
	пСтрук.Вставить("Дата2", пПустаяДата);

	Если Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда
		пСтрук.ЭтоРегистрБУ = Истина;
		пСтрук.Вставить("ЕстьПериодИтогов", Истина);
		пСтрук.Вставить("ЕстьРежимАгрегатов", Ложь);
		пСтрук.Вставить("ЕстьТекущиеИтоги", Истина);
		пМенеджер = РегистрыБухгалтерии[пСтрук.Имя];
	Иначе
		пСтрук.ОборотныйРегистр = (ОбъектМД.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты);
		пСтрук.Вставить("ЕстьПериодИтогов", Не пСтрук.ОборотныйРегистр);
		пСтрук.Вставить("ЕстьРежимАгрегатов", пСтрук.ОборотныйРегистр);
		пСтрук.Вставить("ЕстьТекущиеИтоги", Не пСтрук.ОборотныйРегистр);
		пМенеджер = РегистрыНакопления[пСтрук.Имя];
	КонецЕсли;

	Если пСтрук.ЕстьПериодИтогов Тогда
		пСтрук.Вставить("Дата1", пМенеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов());
		пСтрук.Вставить("Дата2", пМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов());
	КонецЕсли;

	пСтрук.Вставить("РежимАгрегатов", ?(пСтрук.ЕстьРежимАгрегатов, пМенеджер.ПолучитьРежимАгрегатов(), Ложь));
	пСтрук.Вставить("ИспользованиеАгрегатов", ?(пСтрук.ЕстьРежимАгрегатов, пМенеджер.ПолучитьИспользованиеАгрегатов(),
		Ложь));
	пСтрук.Вставить("ИспользованиеТекущихИтогов", ?(пСтрук.ЕстьТекущиеИтоги,
		пМенеджер.ПолучитьИспользованиеТекущихИтогов(), Ложь));
	пСтрук.Вставить("ИспользованиеИтогов", пМенеджер.ПолучитьИспользованиеИтогов());
	пСтрук.Вставить("РежимРазделенияИтогов", пМенеджер.ПолучитьРежимРазделенияИтогов());
	пСтрук.Вставить("МинимальныйПериодРассчитанныхИтогов", ?(пСтрук.ОборотныйРегистр, пПустаяДата,
		пМенеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов()));
	пСтрук.Вставить("МаксимальныйПериодРассчитанныхИтогов", ?(пСтрук.ОборотныйРегистр, пПустаяДата,
		пМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов()));

	Возврат пСтрук;
КонецФункции



// структура хранения

&НаКлиенте
Процедура _ПоказыватьСтруктуруХраненияВТерминах1СПриИзменении(Элемент)
	_СХИндексы.Очистить();
	_СХПоля.Очистить();
	_СХПоляИндексов.Очистить();
	_СХТаблицы.Очистить();

	вЗаполнитьРазделСтруктураХранения();
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьРазделСтруктураХранения(Знач ДанныеСХ = Неопределено)
	Если ДанныеСХ = Неопределено Тогда
		ОбъектМД = Метаданные.НайтиПоПолномуИмени(_ПолноеИмя);
		Если ОбъектМД <> Неопределено Тогда
			ДанныеСХ = ПолучитьСтруктуруХраненияБазыДанных(вЗначениеВМассив(ОбъектМД),
				Не _ПоказыватьСтруктуруХраненияВТерминах1С);
			Если ДанныеСХ = Неопределено Или ДанныеСХ.Количество() = 0 Тогда
				Возврат;
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
	КонецЕсли;

	НомерХ = 0;
	НомерХХ = 0;

	Для Каждого Стр Из ДанныеСХ Цикл
		НомерХ = НомерХ + 1;
		НомерТаблицы = "(" + НомерХ + ")";

		НС = _СХТаблицы.Добавить();
		ЗаполнитьЗначенияСвойств(НС, Стр);
		НС.НомерТаблицы = НомерТаблицы;
		Если ПустаяСтрока(НС.ИмяТаблицы) Тогда
			НС.ИмяТаблицы = _ПолноеИмя + "(" + Стр.Назначение + ")";
		КонецЕсли;

		Для Каждого СтрХ Из Стр.Поля Цикл
			НС = _СХПоля.Добавить();
			ЗаполнитьЗначенияСвойств(НС, СтрХ);
			НС.ИмяТаблицыХранения = Стр.ИмяТаблицыХранения;
			НС.НомерТаблицы = НомерТаблицы;
		КонецЦикла;
		Для Каждого СтрХ Из Стр.Индексы Цикл
			НомерХХ = НомерХХ + 1;
			НомерИндекса = "(" + НомерХХ + ")";

			НС = _СХИндексы.Добавить();
			ЗаполнитьЗначенияСвойств(НС, СтрХ);
			НС.ИмяТаблицыХранения = Стр.ИмяТаблицыХранения;
			НС.НомерТаблицы = НомерТаблицы;
			НС.НомерИндекса = НомерИндекса;

			Для Каждого СтрХХ Из СтрХ.Поля Цикл
				НС = _СХПоляИндексов.Добавить();
				ЗаполнитьЗначенияСвойств(НС, СтрХХ);
				НС.НомерИндекса = НомерИндекса;
			КонецЦикла;
		КонецЦикла;

	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура _СХТаблицыПриАктивизацииСтроки(Элемент)
	ТекДанные = Элемент.ТекущиеДанные;
	Если ТекДанные <> Неопределено Тогда
		Элементы._СХПоля.ОтборСтрок = Новый ФиксированнаяСтруктура("НомерТаблицы", ТекДанные.НомерТаблицы);
		Элементы._СХИндексы.ОтборСтрок = Новый ФиксированнаяСтруктура("НомерТаблицы", ТекДанные.НомерТаблицы);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _СХИндексыПриАктивизацииСтроки(Элемент)
	ТекДанные = Элемент.ТекущиеДанные;
	Если ТекДанные <> Неопределено Тогда
		Элементы._СХПоляИндексов.ОтборСтрок = Новый ФиксированнаяСтруктура("НомерИндекса", ТекДанные.НомерИндекса);
	КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура _ОбновитьНумерациюОбъектов(Команда)
	Если Не вЕстьПраваАдминистратора() Тогда
		ПоказатьПредупреждение( , "Нет прав на выполнение операции!", 20);
		Возврат;
	КонецЕсли;

	пТекст = ?(_ПолноеИмя = "Конфигурация", "Нумерация всех объектов будет обновлена. Продолжить?",
		"Нумерация обекта будет обновлена. Продолжить?");
	ПоказатьВопрос(Новый ОписаниеОповещения("вОбновитьНумерациюОбъектовОтвет", ЭтаФорма), пТекст,
		РежимДиалогаВопрос.ДаНетОтмена, 20);
КонецПроцедуры

&НаКлиенте
Процедура вОбновитьНумерациюОбъектовОтвет(РезультатВопроса, ДопПарам = Неопределено) Экспорт
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		вОбновитьНумерациюОбъектов(_ПолноеИмя);
	КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция вОбновитьНумерациюОбъектов(Знач ПолноеИмя)
	Если ПолноеИмя = "Конфигурация" Тогда
		Попытка
			ОбновитьНумерациюОбъектов();
		Исключение
			Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;

	ИначеЕсли СтрНайти(ПолноеИмя, ".") <> 0 Тогда
		ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);

		Если ОбъектМД <> Неопределено Тогда
			Попытка
				ОбновитьНумерациюОбъектов(ОбъектМД);
			Исключение
				Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;

	Возврат Истина;
КонецФункции


// управление итогами
&НаКлиенте
Процедура _ОбновитьУправлениеИтогами(Команда)
	вЗаполнитьСраницуУправленияИтогами(_ПолноеИмя);
КонецПроцедуры

&НаКлиенте
Процедура _ПересчитатьИтоги(Команда)
	вПоказатьВопрос("вОбработатьКомандуУправленияИтогами", "Будет выполнен полный пересчет итогов. Продолжить?",
		"ПересчитатьИтоги");
КонецПроцедуры

&НаКлиенте
Процедура _ПересчитатьТекущиеИтоги(Команда)
	вПоказатьВопрос("вОбработатьКомандуУправленияИтогами", "Текущие итоги будут пересчитаны. Продолжить?",
		"ПересчитатьТекущиеИтоги");
КонецПроцедуры

&НаКлиенте
Процедура _ПересчитатьИтогиЗаПериод(Команда)
	вПоказатьВопрос("вОбработатьКомандуУправленияИтогами", "Будут пересчитаны итоги за заданный период. Продолжить?",
		"ПересчитатьИтогиЗаПериод");
КонецПроцедуры

&НаКлиенте
Процедура _УстановитьПериодРассчитанныхИтогов(Команда)
	пИмя = ЭтаФорма.ТекущийЭлемент.Имя;
	Если Прав(пИмя, 1) = "1" Тогда
		вПоказатьВопрос("вОбработатьКомандуУправленияИтогами",
			"Будет изменен минимальный период рассчитанных итогов. Продолжить?",
			"УстановитьМинимальныйПериодРассчитанныхИтогов");
	ИначеЕсли Прав(пИмя, 1) = "2" Тогда
		вПоказатьВопрос("вОбработатьКомандуУправленияИтогами",
			"Будет изменен максимальный период рассчитанных итогов. Продолжить?",
			"УстановитьМаксимальныйПериодРассчитанныхИтогов");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура вОбработатьКомандуУправленияИтогами(РезультатВопроса, ИмяКоманды) Экспорт
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		пСтрук = вПолучитьНовыеНастройкиУправленияИтогами();
		пСтрук.Вставить("ИмяКоманды", ИмяКоманды);

		пРезультат = вВыполнитКомандуУправленияИтогами(_ПолноеИмя, ИмяКоманды, пСтрук);
		_ОбновитьУправлениеИтогами(Неопределено);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция вПолучитьНовыеНастройкиУправленияИтогами()
	пСтрук = Новый Структура;
	пСтрук.Вставить("ПериодПересчетаИтогов", _ПериодПересчетаИтогов);
	пСтрук.Вставить("МинимальныйПериодРассчитанныхИтогов", _МинимальныйПериодРассчитанныхИтогов);
	пСтрук.Вставить("МаксимальныйПериодРассчитанныхИтогов", _МаксимальныйПериодРассчитанныхИтогов);

	Возврат пСтрук;
КонецФункции

&НаКлиенте
Процедура СвойствоРегистраПриИзменении(Элемент)
	вПоказатьВопрос("вОбработатьИзменениеСвойстваРегистра", "Свойство регистра будет изменено. Продолжить?",
		Элемент.Имя);
КонецПроцедуры

&НаКлиенте
Процедура вОбработатьИзменениеСвойстваРегистра(РезультатВопроса, ИмяСвойства) Экспорт
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		вИзменитьСвойствоРегистра(_ПолноеИмя, Сред(ИмяСвойства, 2), ЭтаФорма[ИмяСвойства]);
		_ОбновитьУправлениеИтогами(Неопределено);
	Иначе
		ЭтаФорма[ИмяСвойства] = Не ЭтаФорма[ИмяСвойства];
	КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция вВыполнитКомандуУправленияИтогами(Знач ПолноеИмя, Знач ИмяКоманды, Знач пСтрукНастройки)
	Если Не вЕстьПраваАдминистратора() Тогда
		Сообщить("Нет прав на выполнение операции!");
		Возврат Ложь;
	КонецЕсли;

	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат Ложь;
	КонецЕсли;

	Если Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда
		пМенеджер = РегистрыБухгалтерии[ОбъектМД.Имя];
	Иначе
		пМенеджер = РегистрыНакопления[ОбъектМД.Имя];
	КонецЕсли;

	Попытка
		Если ИмяКоманды = "ПересчитатьИтоги" Тогда
			пМенеджер.ПересчитатьИтоги();
		ИначеЕсли ИмяКоманды = "ПересчитатьТекущиеИтоги" Тогда
			пМенеджер.ПересчитатьТекущиеИтоги();
		ИначеЕсли ИмяКоманды = "ПересчитатьИтогиЗаПериод" Тогда
			Дата1 = пСтрукНастройки.ПериодПересчетаИтогов.ДатаНачала;
			Дата2 = пСтрукНастройки.ПериодПересчетаИтогов.ДатаОкончания;
			пМенеджер.ПересчитатьИтогиЗаПериод(Дата1, Дата2);
		ИначеЕсли ИмяКоманды = "УстановитьМинимальныйПериодРассчитанныхИтогов" Тогда
			пМенеджер.УстановитьМинимальныйПериодРассчитанныхИтогов(пСтрукНастройки.МинимальныйПериодРассчитанныхИтогов);
		ИначеЕсли ИмяКоманды = "УстановитьМаксимальныйПериодРассчитанныхИтогов" Тогда
			пМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(
				пСтрукНастройки.МаксимальныйПериодРассчитанныхИтогов);
		Иначе
			Возврат Ложь;
		КонецЕсли;
	Исключение
		Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Ложь;
	КонецПопытки;

	Возврат Истина;
КонецФункции

&НаСервереБезКонтекста
Функция вИзменитьСвойствоРегистра(Знач ПолноеИмя, Знач ИмяСвойства, Знач пЗначение)
	Если Не вЕстьПраваАдминистратора() Тогда
		Сообщить("Нет прав на выполнение операции!");
		Возврат Ложь;
	КонецЕсли;

	ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если ОбъектМД = Неопределено Тогда
		Возврат Ложь;
	КонецЕсли;

	Если Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда
		пМенеджер = РегистрыБухгалтерии[ОбъектМД.Имя];
	Иначе
		пМенеджер = РегистрыНакопления[ОбъектМД.Имя];
	КонецЕсли;

	Попытка
		Если ИмяСвойства = "РежимАгрегатов" Тогда
			пМенеджер.УстановитьРежимАгрегатов(пЗначение);
		ИначеЕсли ИмяСвойства = "ИспользованиеАгрегатов" Тогда
			пМенеджер.УстановитьИспользованиеАгрегатов(пЗначение);
		ИначеЕсли ИмяСвойства = "ИспользованиеИтогов" Тогда
			пМенеджер.УстановитьИспользованиеИтогов(пЗначение);
		ИначеЕсли ИмяСвойства = "ИспользованиеТекущихИтогов" Тогда
			пМенеджер.УстановитьИспользованиеТекущихИтогов(пЗначение);
		ИначеЕсли ИмяСвойства = "РежимРазделенияИтогов" Тогда
			пМенеджер.УстановитьРежимРазделенияИтогов(пЗначение);
		Иначе
			Возврат Ложь;
		КонецЕсли;
	Исключение
		Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Ложь;
	КонецПопытки;

	Возврат Истина;
КонецФункции


// права доступа
&НаКлиенте
Процедура _ДоступныеОбъектыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	_ОткрытьОбъектПравДоступа(Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура _ЗаполнитьПраваДоступа(Команда)
	пЭтоРоль = (СтрНайти(_ПолноеИмя, "Роль.") = 1);

	ТабПользователиСДоступом.Очистить();

	Если пЭтоРоль Тогда
		_ДоступныеОбъекты.Очистить();

		Если ПустаяСтрока(_ПравоДоступаКОбъекту) Тогда
			Возврат;
		КонецЕсли;

		пСтрукРезультат = вПолучитьДоступныеОбъектыДляРоли(_ПолноеИмя, _ПравоДоступаКОбъекту,
			_ДопПеременные.ОписаниеПравДоступа);
		Если пСтрукРезультат.ЕстьДанные Тогда
			Для Каждого Элем Из пСтрукРезультат.ДоступныеОбъекты Цикл
				ЗаполнитьЗначенияСвойств(_ДоступныеОбъекты.Добавить(), Элем);
			КонецЦикла;
			_ДоступныеОбъекты.Сортировать("Вид, ПолноеИмя");

			Для Каждого Элем Из пСтрукРезультат.Пользователи Цикл
				ЗаполнитьЗначенияСвойств(ТабПользователиСДоступом.Добавить(), Элем);
			КонецЦикла;
			ТабПользователиСДоступом.Сортировать("Имя");
		КонецЕсли;

	Иначе
		ТабРолиСДоступом.Очистить();

		Если ПустаяСтрока(_ПравоДоступаКОбъекту) Тогда
			Возврат;
		КонецЕсли;

		пСтрукРезультат = вПолучитьПраваДоступаКОбъекту(_ПравоДоступаКОбъекту, _ПолноеИмя);
		Если пСтрукРезультат.ЕстьДанные Тогда
			Для Каждого Элем Из пСтрукРезультат.Роли Цикл
				ЗаполнитьЗначенияСвойств(ТабРолиСДоступом.Добавить(), Элем);
			КонецЦикла;

			Для Каждого Элем Из пСтрукРезультат.Пользователи Цикл
				ЗаполнитьЗначенияСвойств(ТабПользователиСДоступом.Добавить(), Элем);
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _ПравоДоступаКОбъектуПриИзменении(Элемент)
	_ЗаполнитьПраваДоступа(Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура ТабРолиСДоступомВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	_ОткрытьОбъектПравДоступа(Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура ТабПользователиСДоступомВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	_ОткрытьОбъектПравДоступа(Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура _ОткрытьОбъектПравДоступа(Команда)
	пИмяСтраницы = Элементы.ПраваДоступаКОбъеткту.ТекущаяСтраница.Имя;

	Если пИмяСтраницы = "ПраваДоступаКОбъекту_Роли" Тогда
		ТекДанные = Элементы.ТабРолиСДоступом.ТекущиеДанные;
		Если ТекДанные <> Неопределено Тогда
			вПоказатьСвойстваОбъекта("Роль." + ТекДанные.Имя);
		КонецЕсли;

	ИначеЕсли пИмяСтраницы = "ПраваДоступаКОбъеткту_Пользователи" Тогда
		ТекДанные = Элементы.ТабПользователиСДоступом.ТекущиеДанные;
		Если ТекДанные <> Неопределено Тогда
			пИдентификаторПользователя = вПолучитьИдентификаторПользователя(ТекДанные.Имя);

			Если Не ПустаяСтрока(пИдентификаторПользователя) Тогда
				пСтрук = Новый Структура("РежимРаботы, ИдентификаторПользователяИБ", 0, пИдентификаторПользователя);
				ОткрытьФорму(ПутьКФормам + "ФормаПользовательИБ", пСтрук, , , , , ,
					РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
			КонецЕсли;
		КонецЕсли;

	ИначеЕсли пИмяСтраницы = "ПраваДоступаДляРоли" Тогда
		ТекДанные = Элементы._ДоступныеОбъекты.ТекущиеДанные;
		Если ТекДанные <> Неопределено И Не ПустаяСтрока(ТекДанные.ПолноеИмя) Тогда
			вПоказатьСвойстваОбъекта(ТекДанные.ПолноеИмя);
		КонецЕсли;

	КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция вПолучитьИдентификаторПользователя(Знач Имя)
	пПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(Имя);

	Возврат ?(пПользователь = Неопределено, "", Строка(пПользователь.УникальныйИдентификатор));
КонецФункции

&НаСервереБезКонтекста
Функция вПолучитьОписаниеОграниченийДляПараметровДоступа()
	пОбъектыСОгрничением = Новый Соответствие;
	пОбъектыСОгрничением.Вставить("ПланОбмена", "Ссылка");
	пОбъектыСОгрничением.Вставить("Справочник", "Ссылка");
	пОбъектыСОгрничением.Вставить("Документ", "Ссылка");
	пОбъектыСОгрничением.Вставить("ЖурналДокументов", "Ссылка");
	пОбъектыСОгрничением.Вставить("ПланВидовХарактеристик", "Ссылка");
	пОбъектыСОгрничением.Вставить("ПланСчетов", "Ссылка");
	пОбъектыСОгрничением.Вставить("ПланВидовРасчета", "Ссылка");
	пОбъектыСОгрничением.Вставить("РегистрСведений", Неопределено);
	пОбъектыСОгрничением.Вставить("РегистрНакопления", "Регистратор");
	пОбъектыСОгрничением.Вставить("РегистрБухгалтерии", "Регистратор");
	пОбъектыСОгрничением.Вставить("РегистрРасчета", "Регистратор");
	пОбъектыСОгрничением.Вставить("БизнесПроцесс", "Ссылка");
	пОбъектыСОгрничением.Вставить("Задача", "Ссылка");

	Возврат пОбъектыСОгрничением;
КонецФункции

&НаСервереБезКонтекста
Функция вПолучитьТаблицуРолиИПользователи()
	__ТабРолиИПользователи = Новый ТаблицаЗначений;
	__ТабРолиИПользователи.Колонки.Добавить("ИмяР", Новый ОписаниеТипов("Строка"));
	__ТабРолиИПользователи.Колонки.Добавить("ИмяП", Новый ОписаниеТипов("Строка"));
	__ТабРолиИПользователи.Колонки.Добавить("ПолноеИмяП", Новый ОписаниеТипов("Строка"));

	Для Каждого П Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
		Для Каждого Р Из П.Роли Цикл
			НС = __ТабРолиИПользователи.Добавить();
			НС.ИмяР = Р.Имя;
			НС.ИмяП = П.Имя;
			НС.ПолноеИмяП = П.ПолноеИмя;
		КонецЦикла;
	КонецЦикла;

	__ТабРолиИПользователи.Индексы.Добавить("ИмяР");
	__ТабРолиИПользователи.Индексы.Добавить("ИмяП");

	Возврат __ТабРолиИПользователи;
КонецФункции

&НаСервереБезКонтекста
Функция вПолучитьДоступныеОбъектыДляРоли(Знач пРоль, Знач пПраво, Знач ОписаниеПравДоступа)
	пРезультат = Новый Структура("ЕстьДанные, ДоступныеОбъекты, Пользователи", Ложь);

	пРольМД = Метаданные.НайтиПоПолномуИмени(пРоль);
	Если пРоль = Неопределено Тогда
		Возврат пРезультат;
	КонецЕсли;

	пРезультат.ЕстьДанные = Истина;
	пРезультат.Вставить("ДоступныеОбъекты", Новый Массив);
	пРезультат.Вставить("Пользователи", Новый Массив);

	Для Каждого П Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
		Для Каждого Р Из П.Роли Цикл
			Если Р.Имя = пРольМД.Имя Тогда
				пСтрук = Новый Структура("Имя, ПолноеИмя");
				ЗаполнитьЗначенияСвойств(пСтрук, П);
				пРезультат.Пользователи.Добавить(пСтрук);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;

	пСтрукОбъектыСОгрничением = Новый Структура;
	пСтрукОбъектыСОгрничением.Вставить("Справочник");
	пСтрукОбъектыСОгрничением.Вставить("Документ");

	пОбъектыСОгрничением = вПолучитьОписаниеОграниченийДляПараметровДоступа();

	пПоляРезультата = "ОграничениеУсловием, Вид, Имя, Представление, ПолноеИмя";

	ТабПользователи = Новый ТаблицаЗначений;
	ТабПользователи.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	ТабПользователи.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));

	пТабОбъекты = Новый ТаблицаЗначений;
	пТабОбъекты.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));
	пТабОбъекты.Колонки.Добавить("ОбъектМД", Новый ОписаниеТипов("ОбъектМетаданных"));

	пСтрук = Новый Структура("
							 |ПараметрыСеанса,
							 |ОбщиеКоманды,
							 |ПланыОбмена,
							 |Справочники,
							 |Документы,
							 |ЖурналыДокументов,
							 |БизнесПроцессы,
							 |Задачи,
							 |РегистрыСведений,
							 |РегистрыНакопления,
							 |РегистрыБухгалтерии,
							 |РегистрыРасчета
							 |");

	Для Каждого Элем Из пСтрук Цикл
		Для Каждого ОбъектМД Из Метаданные[Элем.Ключ] Цикл
			НС = пТабОбъекты.Добавить();
			НС.ПолноеИмя = ОбъектМД.ПолноеИмя();
			НС.ОбъектМД = ОбъектМД;

			пСтрук = Новый Структура("Команды");
			ЗаполнитьЗначенияСвойств(пСтрук, ОбъектМД);

			Если пСтрук.Команды <> Неопределено Тогда
				Для Каждого пКоманда Из ОбъектМД.Команды Цикл
					НС = пТабОбъекты.Добавить();
					НС.ПолноеИмя = пКоманда.ПолноеИмя();
					НС.ОбъектМД = пКоманда;
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;

	Для Каждого Стр Из пТабОбъекты Цикл
		пСтрук = Новый Структура(пПоляРезультата);

		пПолноеИмя = Стр.ОбъектМД.ПолноеИмя();
		Если СтрНайти(пПолноеИмя, ".Команда.") <> 0 Тогда
			Поз1 = СтрНайти(пПолноеИмя, ".", НаправлениеПоиска.СКонца);
			пСтрук.Вид = "ЧужаяКоманда";
			пСтрук.Имя = Сред(пПолноеИмя, Поз1 + 1);
		Иначе
			Поз1 = СтрНайти(пПолноеИмя, ".");
			пСтрук.Вид = Лев(пПолноеИмя, Поз1 - 1);
			пСтрук.Имя = Сред(пПолноеИмя, Поз1 + 1);
		КонецЕсли;

		пСписокПрав = ОписаниеПравДоступа[пСтрук.Вид];

		Если пСписокПрав = Неопределено Тогда
			Продолжить;
		ИначеЕсли СтрНайти(пСписокПрав, пПраво) = 0 Тогда
			Продолжить;
		КонецЕсли;

		Если ПравоДоступа(пПраво, Стр.ОбъектМД, пРольМД) Тогда

			пСтрук.ПолноеИмя = пПолноеИмя;
			пСтрук.Представление = Стр.ОбъектМД.Представление();

			пПоле = пОбъектыСОгрничением[пСтрук.Вид];
			Если пПоле <> Неопределено Тогда
				пСтрук.ОграничениеУсловием = ПараметрыДоступа(пПраво, Стр.ОбъектМД, пПоле, пРольМД).ОграничениеУсловием;
			ИначеЕсли пСтрук.Вид = "РегистрСведений" И Стр.ОбъектМД.Измерения.Количество() <> 0 Тогда
				пПоле = Стр.ОбъектМД.Измерения[0].Имя;
				пСтрук.ОграничениеУсловием = ПараметрыДоступа(пПраво, Стр.ОбъектМД, пПоле, пРольМД).ОграничениеУсловием;
			КонецЕсли;

			пРезультат.ДоступныеОбъекты.Добавить(пСтрук);
		КонецЕсли;
	КонецЦикла;

	Возврат пРезультат;
КонецФункции

&НаСервереБезКонтекста
Функция вПолучитьПраваДоступаКОбъекту(Знач ИмяПрава, Знач ПолноеИмя)
	СтрукРезультат = Новый Структура("ЕстьДанные, Роли, Пользователи", Ложь);

	Если ПустаяСтрока(ИмяПрава) Тогда
		Возврат СтрукРезультат;
	КонецЕсли;

	пОбъектыСОгрничением = вПолучитьОписаниеОграниченийДляПараметровДоступа();

	ТабРоли = Новый ТаблицаЗначений;
	ТабРоли.Колонки.Добавить("ОграничениеУсловием", Новый ОписаниеТипов("Булево"));
	ТабРоли.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	ТабРоли.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка"));

	ТабПользователи = Новый ТаблицаЗначений;
	ТабПользователи.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	ТабПользователи.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));

	Если СтрНайти(ПолноеИмя, ".Команда.") <> 0 Тогда
		ТипМД = "ЧужаяКоманда";
	Иначе
		ТипМД = Лев(ПолноеИмя, СтрНайти(ПолноеИмя, ".") - 1);
	КонецЕсли;

	Если ТипМД <> "Пользователь" Тогда
		ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);

		Если ОбъектМД = Неопределено Тогда
			Возврат СтрукРезультат;
		КонецЕсли;
	КонецЕсли;

	Если ТипМД = "РегистрСведений" И ОбъектМД.Измерения.Количество() <> 0 Тогда
		пПоле = ОбъектМД.Измерения[0].Имя;
		пОбъектыСОгрничением[ТипМД] = пПоле;
	КонецЕсли;

	ЭтоОбычныйРежим = Истина;

	Если ЭтоОбычныйРежим И ПустаяСтрока(ИмяПрава) Тогда
		Возврат СтрукРезультат;
	КонецЕсли;
	Если ЭтоОбычныйРежим Тогда
		Для Каждого Элем Из Метаданные.Роли Цикл
			Если ПравоДоступа(ИмяПрава, ОбъектМД, Элем) Тогда
				НС = ТабРоли.Добавить();
				ЗаполнитьЗначенияСвойств(НС, Элем);

				пПоле = пОбъектыСОгрничением[ТипМД];
				Если пПоле <> Неопределено Тогда
					НС.ОграничениеУсловием = ПараметрыДоступа(ИмяПрава, ОбъектМД, пПоле, Элем).ОграничениеУсловием;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;

		ТабРоли.Сортировать("Имя");
	КонецЕсли;

	__ТабРолиИПользователи = вПолучитьТаблицуРолиИПользователи();

	Если ЭтоОбычныйРежим Тогда
		СтрукР = Новый Структура("ИмяР");
		СтрукП = Новый Структура("Имя");

		Для Каждого Стр Из ТабРоли Цикл
			СтрукР.ИмяР = Стр.Имя;
			Для Каждого СтрХ Из __ТабРолиИПользователи.НайтиСтроки(СтрукР) Цикл
				СтрукП.Имя = СтрХ.ИмяП;
				Если ТабПользователи.НайтиСтроки(СтрукП).Количество() = 0 Тогда
					НС = ТабПользователи.Добавить();
					НС.Имя = СтрХ.ИмяП;
					НС.ПолноеИмя = СтрХ.ПолноеИмяП;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;

		ТабПользователи.Сортировать("Имя");
	КонецЕсли;

	СтрукРезультат.ЕстьДанные = Истина;
	СтрукРезультат.Роли = Новый Массив;
	СтрукРезультат.Пользователи = Новый Массив;

	Для Каждого Стр Из ТабРоли Цикл
		Струк = Новый Структура("Имя, Синоним, ОграничениеУсловием");
		ЗаполнитьЗначенияСвойств(Струк, Стр);
		СтрукРезультат.Роли.Добавить(Струк);
	КонецЦикла;

	Для Каждого Стр Из ТабПользователи Цикл
		Струк = Новый Структура("Имя, ПолноеИмя");
		ЗаполнитьЗначенияСвойств(Струк, Стр);
		СтрукРезультат.Пользователи.Добавить(Струк);
	КонецЦикла;

	Возврат СтрукРезультат;
КонецФункции
&НаКлиенте
Процедура _ЗаполнитьЗависимыеОбъекты(Команда)
	_ЗависимыеОбъекты.ПолучитьЭлементы().Очистить();
	_ГдеНайдено = "";

	вЗаполнитьЗависимыеОбъекты();

	Для Каждого Элем Из _ЗависимыеОбъекты.ПолучитьЭлементы() Цикл
		Элементы._ЗависимыеОбъекты.Развернуть(Элем.ПолучитьИдентификатор(), Ложь);
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура вЗаполнитьЗависимыеОбъекты()

	пОбъектМД = Метаданные.НайтиПоПолномуИмени(_ПолноеИмя);
	Если пОбъектМД = Неопределено Тогда
		Возврат;
	КонецЕсли;
	пКорневойУзел = _ЗависимыеОбъекты.ПолучитьЭлементы().Добавить();
	пКорневойУзел.ВидУзла = 1;
	пКорневойУзел.Имя = пОбъектМД.Имя;
	пКорневойУзел.Представление = пОбъектМД.Представление();
	пКорневойУзел.ПолноеИмя = _ПолноеИмя;

	Поз = СтрНайти(_ПолноеИмя, ".");
	пТипДляПоиска = Тип(Лев(_ПолноеИмя, Поз - 1) + "Ссылка" + Сред(_ПолноеИмя, Поз));

	пНадоСмотретьВидыСубконтоПС = (Лев(_ПолноеИмя, Поз - 1) = "ПланВидовХарактеристик");

	пТабРезультат = Новый ТаблицаЗначений;
	пТабРезультат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	пТабРезультат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	пТабРезультат.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));
	пТабРезультат.Колонки.Добавить("ГдеНайдено", Новый ОписаниеТипов("Строка"));
	
	
	// ---
	пСтрукРазделы = Новый Структура("ПараметрыСеанса, ОпределяемыеТипы, Константы");

	пСоотв = Новый Соответствие;

	Для Каждого пЭлем Из пСтрукРазделы Цикл
		пТабРезультат.Очистить();

		пРазделМД = Метаданные[пЭлем.Ключ];

		Для Каждого ОбъектМД Из пРазделМД Цикл
			пПолноеИмя = ОбъектМД.ПолноеИмя();
			пГдеНайдено = "";
			пСчетчик = 0;

			Если ОбъектМД.Тип.Типы().Найти(пТипДляПоиска) <> Неопределено Тогда
				пПуть = "Объект.Тип";
				Если пСчетчик = 0 Тогда
					пГдеНайдено = пПуть;
				Иначе
					пГдеНайдено = пГдеНайдено + "," + пПуть;
				КонецЕсли;
				пСчетчик = пСчетчик + 1;

				пСоотв[пПолноеИмя] = 1;
			КонецЕсли;

			Если пСоотв[пПолноеИмя] <> Неопределено Тогда
				НС = пТабРезультат.Добавить();
				НС.Имя = ОбъектМД.Имя;
				НС.Представление = ОбъектМД.Представление();
				НС.ПолноеИмя = пПолноеИмя;
				НС.ГдеНайдено = пГдеНайдено;
			КонецЕсли;
		КонецЦикла;

		пКоличество = пТабРезультат.Количество();
		Если пКоличество <> 0 Тогда
			пТабРезультат.Сортировать("Имя");

			пУзелРаздела = пКорневойУзел.ПолучитьЭлементы().Добавить();
			пУзелРаздела.Имя = пЭлем.Ключ + " (" + пКоличество + ")";
			пУзелРаздела.ВидУзла = 2;
			пКоллекцияЭлементов = пУзелРаздела.ПолучитьЭлементы();

			Для Каждого Стр Из пТабРезультат Цикл
				ЗаполнитьЗначенияСвойств(пКоллекцияЭлементов.Добавить(), Стр);
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	// ---
	пСтрукРазделы = Новый Структура("ПланыОбмена, Справочники, Документы, ПланыВидовРасчета, ПланыВидовХарактеристик, ПланыСчетов,
									|РегистрыСведений, РегистрыНакопления, РегистрыБухгалтерии, РегистрыРасчета,
									|БизнесПроцессы, Задачи");

	пСтрукОбласти = Новый Структура("Измерения, Ресурсы, Реквизиты");

	пСоотв = Новый Соответствие;

	Для Каждого пЭлем Из пСтрукРазделы Цикл
		пТабРезультат.Очистить();

		пРазделМД = Метаданные[пЭлем.Ключ];

		пЭтоПланСчетов = (пЭлем.Ключ = "ПланыСчетов");
		пЭтоПланОбмена = (пЭлем.Ключ = "ПланыОбмена");
		пЭтоРегистр = (СтрНайти(пЭлем.Ключ, "Регистры") = 1);

		Для Каждого ОбъектМД Из пРазделМД Цикл
			пПолноеИмя = ОбъектМД.ПолноеИмя();
			пГдеНайдено = "";
			пСчетчик = 0;

			Если пЭтоРегистр Тогда
				Для Каждого пОбласть Из пСтрукОбласти Цикл
					Для Каждого пРеквизит Из ОбъектМД[пОбласть.Ключ] Цикл
						Если пРеквизит.Тип.Типы().Найти(пТипДляПоиска) <> Неопределено Тогда
							пПуть = "Объект." + пОбласть.Ключ + "." + пРеквизит.Имя;
							Если пСчетчик = 0 Тогда
								пГдеНайдено = пПуть;
							Иначе
								пГдеНайдено = пГдеНайдено + "," + пПуть;
							КонецЕсли;
							пСчетчик = пСчетчик + 1;

							пСоотв[пПолноеИмя] = 1;
						КонецЕсли;
					КонецЦикла;
				КонецЦикла;

			Иначе
				Для Каждого пРеквизит Из ОбъектМД.Реквизиты Цикл
					Если пРеквизит.Тип.Типы().Найти(пТипДляПоиска) <> Неопределено Тогда
						Если пСчетчик = 0 Тогда
							пГдеНайдено = "Объект.Реквизиты." + пРеквизит.Имя;
						Иначе
							пГдеНайдено = пГдеНайдено + ",Объект.Реквизиты." + пРеквизит.Имя;
						КонецЕсли;
						пСчетчик = пСчетчик + 1;

						пСоотв[пПолноеИмя] = 1;
					КонецЕсли;
				КонецЦикла;

				Для Каждого пТабличнаяЧасть Из ОбъектМД.ТабличныеЧасти Цикл
					Для Каждого пРеквизит Из пТабличнаяЧасть.Реквизиты Цикл
						Если пРеквизит.Тип.Типы().Найти(пТипДляПоиска) <> Неопределено Тогда
							Если пСчетчик = 0 Тогда
								пГдеНайдено = "Объект." + пТабличнаяЧасть.Имя + ".Реквизиты." + пРеквизит.Имя;
							Иначе
								пГдеНайдено = пГдеНайдено + ",Объект." + пТабличнаяЧасть.Имя + ".Реквизиты."
									+ пРеквизит.Имя;
							КонецЕсли;
							пСчетчик = пСчетчик + 1;

							пСоотв[пПолноеИмя] = 1;
						КонецЕсли;
					КонецЦикла;
				КонецЦикла;

				Если пЭтоПланОбмена Тогда
					Если ОбъектМД.Состав.Содержит(пОбъектМД) Тогда
						Если пСчетчик = 0 Тогда
							пГдеНайдено = "Объект.Состав";
						Иначе
							пГдеНайдено = пГдеНайдено + ",Объект.Состав";
						КонецЕсли;
						пСчетчик = пСчетчик + 1;

						пСоотв[пПолноеИмя] = 1;
					КонецЕсли;
				КонецЕсли;

				Если пЭтоПланСчетов И пНадоСмотретьВидыСубконтоПС Тогда
					Если ОбъектМД.ВидыСубконто = пОбъектМД Тогда
						Если пСчетчик = 0 Тогда
							пГдеНайдено = "Объект.ВидыСубконто";
						Иначе
							пГдеНайдено = пГдеНайдено + ",Объект.ВидыСубконто";
						КонецЕсли;
						пСчетчик = пСчетчик + 1;

						пСоотв[пПолноеИмя] = 1;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;

			Если пСоотв[пПолноеИмя] <> Неопределено Тогда
				НС = пТабРезультат.Добавить();
				НС.Имя = ОбъектМД.Имя;
				НС.Представление = ОбъектМД.Представление();
				НС.ПолноеИмя = пПолноеИмя;
				НС.ГдеНайдено = пГдеНайдено;
			КонецЕсли;
		КонецЦикла;

		пКоличество = пТабРезультат.Количество();
		Если пКоличество <> 0 Тогда
			пТабРезультат.Сортировать("Имя");

			пУзелРаздела = пКорневойУзел.ПолучитьЭлементы().Добавить();
			пУзелРаздела.Имя = пЭлем.Ключ + " (" + пКоличество + ")";
			пУзелРаздела.ВидУзла = 2;
			пКоллекцияЭлементов = пУзелРаздела.ПолучитьЭлементы();

			Для Каждого Стр Из пТабРезультат Цикл
				ЗаполнитьЗначенияСвойств(пКоллекцияЭлементов.Добавить(), Стр);
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура _ЗависимыеОбъектыПриАктивизацииСтроки(Элемент)
	ПодключитьОбработчикОжидания("вОбработкаАктивизацииСтрокиЗависимых", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура вОбработкаАктивизацииСтрокиЗависимых()
	ТекДанные = Элементы._ЗависимыеОбъекты.ТекущиеДанные;
	Если ТекДанные <> Неопределено Тогда
		_ГдеНайдено = СтрЗаменить(ТекДанные.ГдеНайдено, ",", Символы.ПС);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _ЗависимыеОбъектыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	ТекДанные = Элементы._ЗависимыеОбъекты.ТекущиеДанные;
	Если ТекДанные <> Неопределено И ТекДанные.ВидУзла = 0 Тогда
		СтандартнаяОбработка = Ложь;
		вПоказатьСвойстваОбъекта(ТекДанные.ПолноеИмя);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _ОткрытьЗависимыйОбъект(Команда)
	ТекДанные = Элементы._ЗависимыеОбъекты.ТекущиеДанные;
	Если ТекДанные <> Неопределено И ТекДанные.ВидУзла = 0 Тогда
		вПоказатьСвойстваОбъекта(ТекДанные.ПолноеИмя);
	КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура _ПрочитатьКонстанту(Команда)
	пРезультат = вПрочитатьКонстанту(_ПолноеИмя);
	Если Не пРезультат.Отказ Тогда
		_ЗначениеКонстанты = пРезультат.Значение;
		_ТипЗначенияКонстанты = пРезультат.ТипЗначения;

		Если ТипЗнч(пРезультат.Значение) = Тип("Строка") Тогда
			_ТекстовоеЗначениеКостанты = пРезультат.Значение;
		Иначе
			_ТекстовоеЗначениеКостанты = пРезультат.Текст;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура _ЗаписатьКонстанту(Команда)
	Если вЗаписатьКонстанту() Тогда
		пВидОбъекта = Лев(_ПолноеИмя, СтрНайти(_ПолноеИмя, ".") - 1);

		Если пВидОбъекта = "Константа" Тогда
			ПоказатьПредупреждение( , "Значение константы изменено!", 20);
		ИначеЕсли пВидОбъекта = "ПараметрСеанса" Тогда
			ПоказатьПредупреждение( , "Значение параметра сеанса изменено!", 20);
		КонецЕсли;

		_ПрочитатьКонстанту(Неопределено);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция вЗаписатьКонстанту()
	УстановитьПривилегированныйРежим(Истина);

	пОбъектМД = Метаданные.НайтиПоПолномуИмени(_ПолноеИмя);
	Если пОбъектМД = Неопределено Тогда
		Возврат Ложь;
	КонецЕсли;

	пВидОбъекта = Лев(_ПолноеИмя, СтрНайти(_ПолноеИмя, ".") - 1);

	Если пВидОбъекта = "Константа" Тогда
		пМенеджерЗначения = Константы[пОбъектМД.Имя].СоздатьМенеджерЗначения();
		Если _ИспользоватьТекстПриЗаписиКонстанты Тогда
			пМенеджерЗначения.Значение = _ТекстовоеЗначениеКостанты;
		Иначе
			пМенеджерЗначения.Значение = _ЗначениеКонстанты;
		КонецЕсли;

		Попытка
			пМенеджерЗначения.Записать();
			Возврат Истина;
		Исключение
			Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			Возврат Ложь;
		КонецПопытки;

	ИначеЕсли пВидОбъекта = "ПараметрСеанса" Тогда
		Попытка
			Если _ИспользоватьТекстПриЗаписиКонстанты Тогда
				ПараметрыСеанса[пОбъектМД.Имя] = _ТекстовоеЗначениеКостанты;
			Иначе
				ПараметрыСеанса[пОбъектМД.Имя] = _ЗначениеКонстанты;
			КонецЕсли;
			Возврат Истина;
		Исключение
			Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			Возврат Ложь;
		КонецПопытки;

	Иначе
		Возврат Ложь;
	КонецЕсли;
КонецФункции

&НаСервереБезКонтекста
Функция вПрочитатьКонстанту(Знач ПолноеИмя)
	УстановитьПривилегированныйРежим(Истина);

	пРезультат = Новый Структура("Отказ, ПричинаОтказа, ТолькоПросмотр, Текст, Значение, ТипЗначения", Ложь, "", Ложь,
		"");

	пОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
	Если пОбъектМД = Неопределено Тогда
		пРезультат.Отказ = Истина;
		пРезультат.ТолькоПросмотр = Истина;
		пРезультат.ПричинаОтказа = "Не удалость найти объект метаданных!";
		Возврат пРезультат;
	КонецЕсли;

	пВидОбъекта = Лев(ПолноеИмя, СтрНайти(ПолноеИмя, ".") - 1);

	Если пВидОбъекта = "Константа" Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
					   |	т.Значение КАК Значение
					   |ИЗ
					   |	" + ПолноеИмя + " КАК т";

		Попытка
			Выборка = Запрос.Выполнить().Выбрать();

			пРезультат.Значение = ?(Выборка.Следующий(), Выборка.Значение, Неопределено);
			пРезультат.ТипЗначения = вИмяТипаСтрокой(вСформироватьСтруктуруТипов(), ТипЗнч(пРезультат.Значение),
				пОбъектМД.Тип);
		Исключение
			Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			пРезультат.Отказ = Истина;
			пРезультат.ПричинаОтказа = ОписаниеОшибки();
			Возврат пРезультат;
		КонецПопытки;

	ИначеЕсли пВидОбъекта = "ПараметрСеанса" Тогда
		Попытка
			пРезультат.Значение = ПараметрыСеанса[пОбъектМД.Имя];
			пРезультат.ТипЗначения = вИмяТипаСтрокой(вСформироватьСтруктуруТипов(), ТипЗнч(пРезультат.Значение),
				пОбъектМД.Тип);
		Исключение
			пРезультат.Отказ = Истина;
			пРезультат.ПричинаОтказа = "значение не установлено!";
		КонецПопытки;

	Иначе
		пРезультат.Отказ = Истина;
		пРезультат.ТолькоПросмотр = Истина;
		пРезультат.ПричинаОтказа = пВидОбъекта + " не поддерживается!";
		Возврат пРезультат;
	КонецЕсли;

	пНеПоддерживаемыеТипы = Новый Массив;
	пНеПоддерживаемыеТипы.Добавить(Тип("ХранилищеЗначения"));
	пНеПоддерживаемыеТипы.Добавить(Тип("ДвоичныеДанные"));
	пНеПоддерживаемыеТипы.Добавить(Тип("ОписаниеТипов"));
	пНеПоддерживаемыеТипы.Добавить(Тип("ФиксированныйМассив"));
	пНеПоддерживаемыеТипы.Добавить(Тип("ФиксированнаяСтруктура"));
	пНеПоддерживаемыеТипы.Добавить(Тип("ФиксированноеСоответствие"));

	Для Каждого Элем Из пНеПоддерживаемыеТипы Цикл
		Если пОбъектМД.Тип.СодержитТип(Элем) Тогда
			пРезультат.ТолькоПросмотр = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если Ложь Тогда
		пТипЗначения = ТипЗнч(пРезультат.Значение);
		Если пТипЗначения = Тип("ФиксированныйМассив") Тогда
			Для Сч = 0 По пРезультат.Значение.ВГраница() Цикл
				пРезультат.Текст = пРезультат.Текст + Символы.ПС + Строка(пРезультат.Значение[Сч]);
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;

	Возврат пРезультат;
КонецФункции